如何用存儲過程及SQL代碼創建登錄、用戶和角色

首先理解什麼是登錄,什麼是用戶,什麼是角色:

登錄:SQL Server2005中,有兩種創建登錄的方式:一種是Windows驗證登錄;另一種是SQL Server身份驗證方式。“登錄方式”就好比辦公樓上使用不同類型的鎖,一旦選擇了使用什麼類型的鎖,就可以開始爲每位員工配發鑰匙,而這個鑰匙就是“登錄”。或稱“登錄名”,但員工只有進入大樓的權利,但卻沒有權限查看和使用裏面的資源(比如檔案櫃)。如果是sysadminsecurityadmin固定服務器角色的成員,則可以創建兩種類型的登錄之一:標準登錄(比如前面比喻中的金屬鑰匙)和Windows登錄(比如較新型的電子出入卡)。

用戶:既然員工擁有了進入大樓的鑰匙,就應該擁有適當的管理性訪問權,他們需要通過訪問其他資源來完成工作。例如,如果打算允許財務部訪問賬目文件,就需要給他們一把文件櫃的鑰匙。員工現在有兩把鑰匙:一把是打開大門的鑰匙,一把是打開文件櫃的鑰匙。

同樣,一旦用戶已登錄到了SQL Server上,就需要允許用戶訪問數據庫。爲此,需要創建數據庫用戶賬戶,然後給這些用戶賬戶授予權限。一旦這個過程結束,SQL Server用戶就擁有了多把鑰匙:一把打開大門的鑰匙(登錄),以及一把打開他們需要訪問的每個文件櫃(數據庫)的鑰匙。

角色:會計需要簽發公司支票,這個權限可以用兩種方式之一來授予。第一,可以給每名會計分別提供一本從同一賬戶中支取的支票簿,並授予從該支票簿中開支票的權限。在這種情況下,需要設法跟蹤當月已經開出的全部支票,否則這種方法可能會造成可怕的後果。完成這項工作的最佳方法是讓整個公司賬戶只使用一本支票簿,並給所有會計授予從這本支票簿中開支票的一個組權限。

SQL Server中,當幾個用戶需要訪問數據庫的權限時,比較容易的方法是將所有的權限作爲一個組授給他們,而不是設法分別管理每個用戶。

言歸正傳,先用存儲過程實現以上操作:

創建新登錄 具體語法請參考MSDN文檔

--創建一個簡單的登錄,登錄名爲:newlogin;登錄密碼:123456;默認數據庫:master,默認數據庫也可以不指定。

EXEC sp_addlogin 'newlogin','123456','master'

--創建用戶

--創建一個簡單的用戶,如果不指定用戶名,則添加到當前數據庫登錄名中,如果不指定角色,則該用戶默認屬於public角色。下爲添加newlogin登錄名。

EXEC sp_adduser 'newlogin'

--創建一個帶用戶名的用戶,用戶可以與登錄名相同(同上一種類似),也可以不同,但要設定當前登錄名,用戶角色可選,默認爲public。下爲將用戶newuser添加到newlogin登錄名中。

EXEC sp_adduser 'newlogin','newuser'

--創建角色

EXEC sp_addrole 'newrole'

--下爲將用戶下爲將用戶newuser添加到newlogin登錄名中。並指定newrole角色。

EXEC sp_adduser 'newlogin','newuser','newrole'

--爲角色newrole賦予jobs表的所有權限

GRANT ALL ON jobs TO newrole

--爲角色newrole賦予sales表的查、改權限

GRANT SELECT,UPDATE ON sales TO newrole

--禁止角色newrole使用employees表的插入權限

DENY INSERT ON employees TO newrole

 

另一種創建用戶和賦予角色的方式

--爲登錄newlogin在數據庫中添加安全賬戶newuser

EXEC sp_grantdbaccess 'newlogin,'newuser'
--
添加newuser爲角色newrole的成員
EXEC sp_addrolemember 'newrole','newuser'

--數據庫用戶、角色、登錄的刪除操作

--刪除當前數據庫用戶

EXEC sp_revokedbaccess 'newuser';

--刪除數據庫登錄

EXEC sp_droplogin 'newlogin'

--刪除數據庫角色

EXEC sp_droprole 'newrole'

--從數據庫角色(newrole)中刪除用戶(newuser)

EXEC sp_droprolemember 'newrole', 'newuser'

--SQL代碼新建登錄、用戶

--創建帶密碼的mylogin登錄名,MUST_CHANGE 選項需要用戶首次連接服務器時更改此密碼。

CREATE LOGIN mylogin WITH PASSWORD = '123456' MUST_CHANGE;

--創建映射到憑據的登錄名。

--以下示例將創建mylogin登錄名。此登錄名將映射到mycredential憑據。

CREATE LOGIN mylogin WITH PASSWORD = '123456',

CREDENTIAL = mycredential;

--Windows 域帳戶創建登錄名

--如果從Windows 域帳戶映射登錄名,則登錄名必須用方括號([ ]) 括起來。

CREATE LOGIN [jack/xiangzhao] FROM WINDOWS;

--如果指定用戶名,則不使用默認登錄名作爲該數據庫用戶

CREATE USER myuser FOR LOGIN mylogin

--以下示例將創建用戶myuser擁有的數據庫角色myrole

CREATE ROLE myrole AUTHORIZATION myuser;

--以下示例將創建db_role固定數據庫角色擁有的數據庫角色myrole

CREATE ROLE myrole AUTHORIZATION db_role;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章