當顯式地為各個表和視圖授予用戶權限時,所選用戶可以訪問這些表和視圖,即使他們沒有訪問底層數據庫的權限。
如果要撤銷用戶的訪問權限,可以使用撤銷命令。然而,撤銷命令是顯式的,並且嚴格限定在命令中指定的對象範圍內。
例如:
%sql REVOKE ALL PRIVILEGES ON DATABASE < DATABASE -name> FROM '@ ' REVOKE SELECT ON FROM ' @ '
如果要撤銷單個用戶的所有特權,可以使用一係列多個命令來實現,也可以使用正則表達式和一係列為循環來自動化流程。
示例代碼
此示例代碼與則所得< >模式轉換為數據庫名和表名,然後撤銷用戶的特權。搜索是遞歸的。
%python from re import search databaseQuery = sqlContext。sql("show databases") databaseList = databasquery .collect()for db in databaseList: listTables = sqlContext。if search(, db['databaseName']): revokeDatabase=sqlContext. sql("show tables from "+db['databaseName']) tableRows = listTables.collect()sql("REVOKE ALL privileges ON DATABASE "+db['databaseName']+" to ' ' ") display(revokeDatabase) print("Ran the REVOKE query ON "+db['databaseName']+" for ") #此循環在表級調用。if search( ,table['tableName']): revokeCommand=sqlContext. if search( ,table['tableName']):sql("REVOKE SELECT ON "+表['database']+"."+table['tableName']+" FROM ' ' ") display(revokeCommand) print(" revoke the SELECT permissions on "+table['database']+"."+表(“表”)+“<用戶名>”)