SQL Server 2000的GRANT語句用於向用戶、角色和組授予使用數據庫對象以及運行某些存儲過程和函數的權限。
GRANT的語法非常簡單——雖然它是SQL Server 2000中功能最強大的語句之一。下面的例子授予皮特(Pete)對pubs數據庫中的authors表進行 INSERT、UPDATE和DELETE的權限。WITH GRANT OPTION表示皮特也可以用這些語句來向其它用戶授權。USE pubs
GO
GRANT INSERT, UPDATE, DELETE
ON authors
TO Pete
WITH GRANT OPTION
GO
你也可以授予皮特ALL權限,這樣他還可以使用CREATE DATABASE、CREATE FUNCTION、CREATE RULE、CREATE TABLE、BACKUP DATABASE以及其它語句。不過,我們一般都希望限制用戶的訪問和操作數據庫的權限。
除了對單獨的用戶外,你還可以對SQL Server角色、Windows NT用戶以及Windows NT組使用GRANT語句。如果用戶和(或者)組或者角色之間存在授權沖突,那麼按照最嚴格的授權處理。不能對其它數據庫的用戶、角色或者組進行授權。
你可以用REVOKE語句來解除已經授予的權限。你也可以用DENY語句來停止阻止用戶從他(她)所從屬的組(或者角色)那裡來得到授予該組(或者角色)的權限。
在下面的例子中,我們將會看到擁有pubs數據庫中的authors表權限的人有哪些。然後,我們給予皮特訪問數據庫的權限。最後,我們再給他對authors表執行INSERT、UPDATE和DELETE的權限。
首先,我們運行sp_helpprotect來看看authors表格上哪些人有哪些權限。
Exec sp_helprotect authors
GO
結果應該與下面類似:
Owner Object Grantee Grantor ProtectType Action Column
----- ------ ------- ----------- ------------- --------- -------
dbo authors guest dbo Grant Delete
dbo authors guest dbo Grant Insert
dbo authors guest dbo Grant References (All+New)
dbo authors guest dbo Grant Select (All+New)
dbo authors guest dbo Grant Update (All+New)
由於在皮特得到訪問數據庫的權限之前,我們不能向他授以執行任何語句的權限,因此,我們應該首先讓皮特獲得訪問數據庫的權限。(實際上,為了可以使用已授予的權限,皮特需要一個SQL Server 2000登錄帳號和訪問該數據庫的許可。這個例子為一個SQL Server 2000中尚未存在的用戶創建訪問數據庫的許可。)
EXEC sp_grantdbAccess Pete
GO
你將會看到“Granted database Access to 'Pete”。
讓我們運行較早前提到的GRANT INSERT, UPDATE, DELETE語句。現在重新執行sp_helpprotect,最後三行應該顯示皮特以及他剛才所獲得授權的信息。