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,最後三行應該顯示皮特以及他剛才所獲得授權的資訊。