天天看點

在SQL Server中建立使用者角色及授權(使用SQL語句)

獲得準許連接配接 sql server 伺服器的權利;

獲得通路特定資料庫中資料的權利(select, update, delete, create table ...)。

假設,我們準備建立一個 dba 資料庫帳戶,用來管理資料庫 mydb。

1. 首先在 sql server 伺服器級别,建立登陸帳戶(create login)

登陸帳戶名為:“dba”,登陸密碼:abcd1234@”,預設連接配接到的資料庫:“mydb”。 這時候,dba 帳戶就可以連接配接到 sql server 伺服器上了。但是此時還不能 通路資料庫中的對象(嚴格的說,此時 dba 帳戶預設是 guest 資料庫使用者身份, 可以通路 guest 能夠通路的資料庫對象)。

要使 dba 帳戶能夠在 mydb 資料庫中通路自己需要的對象, 需要在資料庫 mydb 中建立一個“資料庫使用者”,賦予這個“資料庫使用者” 某些通路權限,并且把登陸帳戶“dba” 和這個“資料庫使用者” 映射起來。 習慣上,“資料庫使用者” 的名字和 “登陸帳戶”的名字相同,即:“dba”。 建立“資料庫使用者”和建立映射關系隻需要一步即可完成:

2. 建立資料庫使用者(create user):

并指定資料庫使用者“dba” 的預設 schema 是“dbo”。這意味着 使用者“dba” 在執行“select * from t”,實際上執行的是 “select * from dbo.t”。

3. 通過加入資料庫角色,賦予資料庫使用者“dba”權限:

此時,dba 就可以全權管理資料庫 mydb 中的對象了。

如果想讓 sql server 登陸帳戶“dba”通路多個資料庫,比如 mydb2。 可以讓 sa 執行下面的語句:

此時,dba 就可以有兩個資料庫 mydb, mydb2 的管理權限了!

下面一個執行個體來說明在sqlserver中如何使用存儲過程建立角色,重建登入,以及如何為登入授權等問題。

revoke 與 deny的差別

revoke:收回之前被授予的權限

deny:拒絕給目前資料庫内的安全帳戶授予權限并防止安全帳戶通過其組或角色成員資格繼承權限。比如usera所在的角色組有inset權限,但是我們deny usera使其沒有insert權限,那麼以後即使usera再怎麼到其他含有insert的角色組中去,還是沒有insert權限,除非該使用者被顯示授權。

簡單來說,deny就是将來都不許給,revoke就是收回已經給予的。