安全用戶圖形化操作
1:先創建安全-登錄名
2:再創建指定數據庫用戶創建自定義架構和數據庫用戶名一樣並綁定剛創建的登錄名
3:為數據庫用戶授予表的操作權限
SQL Server 2008 安全性
在數據庫系統的設計和管理中,安全性通常是最有挑戰性的一個方面。數據庫管理員總
是希望服務器能盡可能地安全,同時又不必投入大景資金或是犧牲用戶功能。遺憾的是,很
多管理員和應用程序開發人員對安全性的好處有所懷疑,認為他們不會受到任何侵害。事實
上,只要用戶能夠訪問數據,就會有安全漏洞。那怎么辦呢?使 SQL Server脫機,把它鎖在 一個只有您能夠進入的屋子里,要求所有數據庫請求都由您手動處理?
安全性並不是保證系統完全不受攻擊,而是減少風險,對風險采取應對措施,以及保
證您采取必要的步驟來減小受攻擊的范圍。記住,給予用戶通過網絡訪問數據庫的權限就
會引入風險因素。本章從外到內介紹了 SQL安全性。通過本章的學習,您可以了解到可用
的不同類型的帳戶和主體,如何控制對數據庫對象的訪問,以及如何加密和保護數據。本
章還包括一些指導原則,幫助為部署和管理SQL Server提供一個安全的解決 方 案 。
因為SQL Server 2008被設計為與Windows Server 2008 一起使用,所以本章的一些示 例在其他操作系統(如Windows Vista、Windows X P或 Windows Server 2003)中的行為可能
有些不同。本章的所有示例以Windows Server 2008為基?| 。另外,記得用您自己的服務器 名稱替換本書中使用的服務器名稱。
6.1 SQL Server身份驗證模式
Microsoft SQL Server 2008提供了兩種對用戶進行身份驗證的模式。默認模式是Windows
身份驗證模式,它使用操作系統的身份驗證機制對需要訪問服務器憑據進行身份驗證,從
而提供了很髙的安全級別。另一種模式是SQL Servei•和 Windows身份驗證模式,允許基 於 Windows的和基於SQL的身份驗證。因此,它有時被稱為混合模式。雖然Windows身 份驗證模式所提供的安全性要好於SQL Server和 Windows身份驗證模式,但是您的應用 程序設計可能要求基於SQL的登錄名。
Windows身份驗證模式允許使用存儲在本地計算機的安全帳戶管理器(SAM)數據庫中 的現有帳戶,或者,如果該服務器是活動目錄域的一個成員,則可以使用Microsoft Windows 活動目錄數據庫中的帳戶。使 用 Windows身份驗證模式的好處包括允許SQL或數據庫管 理員使用已經存在的帳戶,從而減少管理開銷,以及允許他們使用更強大的身份驗證協議,
例如 Kerberos 或 Windows NT LAN Manager (NTLM)O
在Windows身份驗證模式中,SQL並不存儲或需要訪問用於身份驗證的密碼信息。Windows 身份驗證提供程序將負責驗證用戶的真實性。
混合模式允許創建SQL Server獨有的登錄名,這些登錄名沒有相應的Windows或活 動目錄帳戶。這可以幫助那些不屬於您的企業的用戶通過身份驗證,並獲得訪問數據庫中
安全對象的權限。當使用SQL登錄名時,SQL Server將用戶名和密碼信息存儲在master 數據庫中,它負責對這些憑據進行身份驗證。
在決定身份驗證方式時,需要確定用戶將如何連接到數據庫。如果SQL Server和數據 庫用戶屬於同一個活動目錄森林,或是屬於共享一個信任的不同森林,那么使用Windows 身份驗證可以簡化創建和管理登錄名的過程。不過,如果SQL Server不在活動目錄域上, 或數據庫用戶不在組織內部,則可以考慮使用基於SQL的登錄名清楚區分安全上下文。
在第2 章中,您學習了如何安裝Microsoft SQL Server2008,而且選擇了使用何種身份
驗證方式。如果在安裝后想改變身份驗證方式,那么需要重新啟動SQL Server服務。
6.1.1 通 過 Management Studio更改身份驗證模式
要在Management Studio中更改身份驗證模式,可遵循以下步驟:
(1) 啟動 SQL Server Management Studio。
(2) 在 “對象資源管理器”中選擇要更改的服務器。
(3) 右擊服務器,然后選擇“屬性”命令,這將會打開“服務器屬性”界面,如圖6-1
所示。
(4) 在 “選擇頁”窗格下,選擇“安全性”頁。
(5) 在 “服務器身份驗證”部分,選擇或査看合適的身份驗證模式。
6 .1 .2 使 用 xpjnstance_regwrite礦展存儲過程
只要對本地服務器有管理權限,也可以采用xpjnstance_regwrite擴展存儲過程來更改身
份驗證模式。下面的例子將顯示如何把身份驗證身份驗證模式改為SQL Server和 Windows 身份驗證模式:
USE m aster
EXEC xp_instance_regwrite N •HKEY_LOCAL_MACHINE', N*Software\Microsoft:\MSSQLServer\MSSQLServer•, N •LoginMode•, REG_DWORD, 2
也可以通過把DWORD值改為1 ,把身份驗證模式改為Windows身份驗證模式。如下
例所示:
USE master EXEC xp_instance_regwrite N*HKEY_LOCAL_MACHINE *, N ’Software\Microsof t:\MSSQLServer\MSSQLServer’,N 1LoginMode *, REG_DWORD, 1
在安裝SQL Server時,sa帳戶默認是禁用的。如果將Windows身份驗證模式改為SQL Server
和Windows身份驗證模式,帳戶仍是禁用的,並保持在安裝向導中指定的密碼不變。建議不要 在生產環境中使用sa帳戶,特別是如果有多人具有SQL Server的管理權限時更是如此,因為 這樣無法問責。如果多人可使用sa帳戶登錄,就不能將審核操作與特定的人關聯起來。
6 . 2 主體
主體(Principal)這個術語用於描述將與SQL Server交互的個人、組和進程。主體可用的資 源取決於它們的位置。Microsoft SQL Server支持幾種不同類型的主體,它們定義在3 個不同 的級別上:Windows級別、SQL Server級別和數據庫級別。在這里可看到每種主體類型以及 它們的使用方式。為了練習本章中的示例,您需要創建一些本地的Windows帳戶,如下所示: (1) 在 “開始”菜單中,右 擊 “我的電腦”,選 擇 “管理”命令。
(2) 在 “服務器管理器”窗口中,展 開 “配置”節點,然后展開“本地用戶和組”節
點(如圖6-2所示)。
(3) 右 擊 “用戶”文件夾,然后選擇“新用戶”命令。
(4) 在 “用戶名”框中,輸 入Bob。 (5) 在 “密碼”和 “確認密碼”框中,輸入P@sswOrd。 (6) 取消選擇“用戶下次登錄時須更改密碼”復選框。
(7) 單 擊 “創建”按鈕。
(8) 在 “用戶名”框中,輸 入 CarolStreet。
(9) 在 “密碼”和 “確認密碼”框中,輸入P@ssw0rdo (10) 取消選擇“用戶下次登錄時須更改密碼”復選框。
(11) 單 擊 “創建”按鈕。
(12) 在 “用戶名”框中,輸入Alice。 (13) 在 “密碼”和 “確認密碼”框中,輸入P@ssw0rd。 (14) 取消選擇“用戶下次登錄時須更改密碼”復選框。
(15) 單 擊 “創建”按鈕。
(16) 單 擊 “關閉”按鈕。
(17) 右 擊 “組”文件夾,選 擇 “新建組”。
(18) 在 “組名”框中,輸入 G Northwest Sales。
(19) 單 擊 “創建”按鈕。
(20) 單 擊 “關閉”按鈕。
(21) 關 閉 “服務器管理器”窗口。
6 .2 .1 登錄名
Microsoft SQL Server 2008為身份驗證提供了兩種登錄名。Windows登錄名和存儲在活
動目錄或本地安全帳戶管理器(SAM)數據庫中的用戶或組帳戶相關聯。SQL登錄名用來表
示沒有Windows帳戶的個人或實體,必須依賴SQL Server存儲和管理帳戶信息。 無論表示的是個人還是組,Windows登錄名都受限於帳戶所在的域或SAM的密碼策 略。當為Windows用戶或組創建登錄名時,SQL Server中不會存放密碼信息。Windows登 錄名的密碼存儲為NULL,即使用值填充了這個字段,該值也往往被忽略。在連接到SQL
Server之前,Windows登錄名也需要身份驗證。這就意味着在連接SQL Server時,活動目 錄或操作系統已經確認了主體的身份。
當為一個組創建Windows登錄名時,該組的所有成員都能被SQL Server成功進行身 份驗證,而不必為每個用戶創建登錄名。
不過,SQL Server登錄名必須進行身份驗證。這樣SQL Server就要負責確認用戶的 身份。SQL將登錄名和密碼哈希值存儲在master數據庫中。SQL登錄名的密碼堅持最佳 安全實踐(如啟用復雜性要求、禁止永不過期密碼、要求密碼定期更換等)是非常重要的。
事實上,Microsoft SQL Server 2008中的選項允許基於Windows或活動目錄策略對SQL
登錄名的密碼復雜性和期限做出要求。復雜的密碼至少要具有以下4 類字符中的3 類:
* 大寫字母字符
• 小寫字母字符
• 非負整數(0〜9)
• 特殊字符($、%、*、&)
注意:
如果SQL Server是活動目錄域的一個成員,那么密碼策略通常定義在一個鏈接到該域 的組策略對象中。對於SQL登錄名或基於本地Windows帳戶的登錄名來說,這可能會被
鏈接到一個組織單元的組策略對象所取代。如 果 SQL Server不是活動目錄域的成員,密碼 策略則定義在本地組策略對象或本地安全策略(這是本地組策略對象的子集)中。
和 SQL以前的版本不同,SQL Server 2008並不自動為[BUILTINXAdministrators]組創建
登錄名,以免使服務器上具有本地管理權限的任何人都可以登錄進該SQL Server。相反, 必須在安裝向導中設置帳戶時添加管理員(參 見 第 2 章),或在安裝后將管理員添加到
sysadmin角色(本章稍后討論)> 同時還創建了一個SQL登 錄 名 sa。sa帳戶對於所有的SQL 功能擁有完全管理訪問權限。在安裝時,系 統 會 提 示 為 s a 帳戶指定密碼。不管是使用 Windows身份驗證模式還是混合模式 安 裝 SQL Server, sa帳戶都被禁用,並在您選擇啟用 該帳戶之前保持禁用狀態。
SQL Server 2008中另一新功能是通過GUI創建映射到證書或非對稱密鑰的SQL Server
登錄名。SQL Server 2005只允許 通 過 T-SQL創建這種映射。這種映射必須在登錄名創建過 程中指定,而證書或非對稱密鑰必須在映射前創建。有關創建和管理證書和對稱密鑰的內
容將在本章后面介紹。
1. 在 Management Studio中創建登錄名
要 使 用 Management Studio創建登錄名,步驟如下:
(1) 在 “對象資源管理器”中展開服務器。
(2) 展 開 “安全性”文件夾。
(3) 右 擊 “登錄名”文件夾,選 擇 “新建登錄名”命令。
(4) 在 “登 錄 名 -新建”對話框(如圖6-3所示)中,輸入想要添加的登錄名,或單擊“搜
索 ”按鈕瀏覽Windows帳戶。
(5 )如果創建SQL登錄名,那么選擇“SQL Server身份驗證”單選按鈕。 ⑹ 在選擇“SQL Server身份驗證”單選按鈕時,可以選擇不強制實施密碼策略。 (7)也可以改變用戶的默認數據庫和語言。
為 Alice新 建 一 個 登錄名
要為Alice新建一個登錄名,步驟如下: (1) 在 “對象資源管理器”中展開服務器。
(2) 展開“安全性”文件夾。
(3) 右擊“登錄名”文件夾,選擇“新建登錄名”命令。
(4) 在 “登錄名-新建”對話框中,單擊“搜索”按鈕。
(5) 在 “選擇用戶或組”對話框中,輸入Alice並單擊“確定”按鈕。
(6) 選擇AdventureWorks2008作為默認數據庫。
⑺ 單 擊 “確定”按鈕。
2 . 使 用 T-SQL創 建 登錄名
另外,也可以使用CREATE LOGIN語句。CREATE LOGIN允許創建Windows登錄名
或 SQL登錄名。該語句取代了先前版本的SQL所使用的兩個存儲過程:sp_grantlogin和 sp_addlogin。在 SQL Server 2008中,為了向后兼容,這兩個存儲過程仍可用,但它們己被 廢棄,並且可能將在未來版本的SQL中刪除。可以使用下列CREATE LOGIN語句格式:
CREATE LOGIN [name] {WITH <options> FROM <source>}
表 6-1和表6-2分別列出了該語句中可用的選項和源。
注 意 :
在將密碼存儲到數據庫之前,SQL Server會自動將其哈希化.使用HASHED選項時 要小心,除非可以肯定您提供的密碼已經被SQL Server哈 希了。例如,如果輸入如下語句:
CREATE LOGIN Bill WITH PASSWORD = ,P@ssw0rd, HASHED
SQL會假定P@ssw0rd是另一個值的哈希值。所以當Bill試圖使用P@ssw0rd登錄時,身 份驗證會失敗。可 以使用loginproperty函數來獲取一個現有用戶的密碼的哈希值,如下例所示:
SELECT LOGINPROPERTY(•bill', 'passwordhash')
3 .管理登錄名
SQL Server Management Studio提供了幾個用於配置登錄名的屬性頁,本章稍后將進行
介紹。除 “常規”屬性頁之外,您應該比較熟悉“狀態”屬性頁,該屬性頁允許啟用或禁
用登錄、解鎖登錄,以及授予或拒絕連接至該SQL Server的訪問。 在 “常規”屬性頁中,可以更改下列屬性:
• 密碼
• 密碼策略
• 密碼過期
• 強制用戶在下次登錄時更改密碼
• 默認數據庫
• 默認語言
也可以使用ALTER LOGIN語句管理登錄名。除了先前列出的CREATE LOGIN語句
的選項之外,ALTER LOGIN語句使用如下格式:
ALTER LOGIN name {<status> I WITH <options>}
/
表 6-3描述了該語句t 用的選項。
4 . 使用 CREATE LOGIN 語句
要用Transact-SQL創建一個新的登錄名,可以使用CREATE LOGIN語句。下面的例
f 為 AughtEight服務器上一個名為Bob的用戶帳戶創建一個新的登錄名:
CREATE LOGIN [AughtEight\Bob] from Windows;
GO
要為一個Windows組創建一個新的登錄名,o了使用下列代碼:
CREATE LOGIN [AughtEight\G Northwest Sales] from Windows;
GO
要為Carol創建一個新的SQL Server登錄名,可以使用下列語法:
CREATE LOGIN Carol WITH PASSWORD = ,This 1$I\/丨yP@ssw0rd,; GO
要 想 將 Carol的密碼改為全部小寫的newpassword,可使用如下命令:
ALTER LOGIN Carol WITH PASSWORD =•newpassword•, CHECK_POLICY=OFF;
GO
要刪除現有登錄名,可 使 用 DROP LOGIN語句。例如,如果想要刪除Bob的登錄名(Bob 有一個基於Windows的登錄名),可使用如下命令:
DROP LOGIN [AughtEightXBob]; GO
5 .更多信息
為了向后兼容,Microsoft SQL Server 2008支 持 表 6-4中列出的用於管理登錄名的存儲
過程。由於這些存儲過程已被廢棄,您應該使用CREATE LOGIN和 ALTER LOGIN語句。
6 .2 .2 憑據
Microsoft SQL Server 2008還包括一個將SQL Server登錄名映射到外部Windows帳戶
的功能。如果需要允許SQL Server登錄名與SQL Server本身范圍之外的資源(如鏈接服務 器或本地文件系統)交互,這個功能很有幫助。它們還可與為EXTERNAL_ACCESS權限配
置的程序集一起使用。
憑據可以配置為一對一映射,也可以配置為多對一映射,允許多個SQL Server登錄名 使用一個共享Windows帳戶進行外部訪問。在 SQL Server 2008中,登錄名可與多個憑據 相關聯,而 SQL Server 2005只 允 許 一 個登錄名映射到一個憑據。也可將憑據配置為使用 EKM提供程序。
1 .創建一個新憑據
創建一個新憑據的步驟如下所示:
(1) 在 “對象資源管理器”中展開服務器。
(2) 展 開 “安全性”文件夾。
(3) 右 擊 “憑據”文件夾,選 擇 “新建憑據”命令,這 將 打 開 “新建憑據”窗口(如圖
6-4所示)。
(4) 輸入憑據的名稱。
(5) 在 “標識”部分,輸入一個Windows帳戶的名稱,或者單擊“…”按鈕瀏覽並選 擇一個帳戶。
(6) 輸入帳戶的密碼。
(7) 再次輸入以確認密碼。
(8) 啟 用 “使用加密提供程序”復選框(如果需要的話)。
(9) 選擇一個有效的EKM提供程序(如果選擇f 上面的選項)。 (10) 單 擊 “確定”按鈕。
2 . 使用 Transact-SQL
也可以使用CREATE CREDENTIAL語句創建一個新的SQL憑據對象。其語法如下所示:
CREATE CREDENTIAL name WITH IDENTITY = * identity_name' [, SECRET ® 1 secret* ] [FOR CRYPTOGRAPHIC_PROVIDER provide rename]
同樣,ALTER CREDENTIAL語句可用於修改憑據的名稱、與憑據關聯的身份以及密
碼。一旦不再需要憑據,就可以使用DROP CREDENTIAL命令將其刪除,如下所示:
DROP CREDENTIAL name
試一 試 為 Windows賬戶創建— 新憑據
本章前面創建了一個名為CarolStreet的 Windows帳戶,其密碼是P@ssw0rd。現在要
為該用戶創建一個新的名為StreetCred的憑據。運行下面的腳本時,使用您自己的服務器名
稱替代 AughtEight: USE m aster
CREATE CREDENTIAL StreetCred WITH IDENTITY = 'AughtEight\CarolStreet', SECRET = ,P@ssw0rd,; GO
然后就可以把Carol的 SQL Server登錄名和StreetCred憑據相關聯:
ALTER LOGIN Carol WITH CREDENTIAL =StreetCred; GO
6 .2 .3 服務器角色
Microsoft SQL Server 2008定義了 8 個可用於簡化SQL登錄名管理(和委托管理)的服務
器級別角色。這些角色通常被稱為固定服務器角色,因為對於這些角色,唯一能更改的只
是成員資格。固定服務器角色可以基於角色的用途,為一個登錄名自動指派一組通用權限。
另外,SQL Server 2008還包含一個public服務器角色。除了定制public服務器角色的成
員列表外,還可為表格格式;數據流(TDS,Tabular Data Stream)端點定義協議所特定的權限。第 7 章將更詳細地介紹這些端點。默汄情況下,所有登錄名都是public服務器角色的成員。
1 .使用固定服務器角色
表 6-5按照出現在服務器上的順序列出了固定服務器角色。
要向固定服務器角色添加一個登請名,可使用sp_addsrvrolemember存儲過程。該存儲 過程的格式如下所示:
sp_addsrvrolemember [ @loginame= ] * login1 , [ @rolename = ] 'role1
只要提供登錄名和角色名。要將Ted添加到securityadmin角色,可使用下列命令:
USE master CREATE LOGIN Ted WITH PASSWORD ='P@ssw0rd*; GO
EXEC sp_adds rvrolemembe r 'Ted1, 1securityadmin *; GO
使 用 sp dropsrvrolemember可從一個固定服務器角色中刪除一個登錄名,其語法和
sp addsrvrolemember存儲過程類似,如下所示:
USE master EXEC sp_dropsrvrolemember 'Ted1, * securityadmin *; GO
2 .更多信息
可以査詢安全目錄視圖(Security Catalog Views),找到有關服務器作用域上的主體的更 多信息。表 6-6列出了標識服務器級別主體的視圖。
6 .2 .4 數據庫用戶
數據庫用戶是Microsoft SQL Server 2008采用的安全模型的另一組成部分。用戶可直 接或通過一個或多個數據庫角色中的成員關系訪問安全的數據庫對象。用戶也可與表、視
圖和存儲過程之類的對象的所有權相關聯。
在創建登錄名時,除非它是擁有所有數據庫管理權限的固定服務器角色的一個成員,
否則該登錄名在附加到服務器的各數據庫中沒有顯式權限。此時,該登錄名和來賓數據庫
用戶關聯在一起,並繼承該用戶帳戶的權限。
在 用 SQL Server Management Studio管理數據庫用戶時,有幾個選項可供選擇。在 “常
規”屬性頁(如圖6-5所示)上,可以為用戶指定一個名稱,並將該用戶和一個現有的登錄名
關聯起來。注意,用戶名不一定要和登錄名匹配。為方便管理,最好的做法是使用一致的
命名約定,但這並不是強制要求。另外,可注意到有一些單選按鈕,顯示用戶是否映射到
登錄名、證書、密鑰,或是沒有任何關聯。通過該圖形用戶界面(GUI),只能創建映射到
一個登錄名的用戶。在下一節中,您將看到如何創建帶有其他映射的用戶。
在 “常規”頁上可以配置的其他選項包括指定用戶的默汄架構、該用戶所擁有的架構
(如果有的話),以及該用戶所屬的數據庫角色。在 “安全對象”頁上,可以列出用戶對其
擁有權限的所有安全對象,以及他們所擁有的權限。最后,在 “擴展屬性”頁上,可以指
定或査看該用戶的其他元數據信息。
試一試 創建一個新用戶和默認架構
本例將在AdventureWorks2008數據庫中為Carol創建一個新的數據庫用戶,並將她的 默認架構設置為Sales架構。 (1) 在 “對象資源管理器”中展開“數據庫”節點。
(2) 展開 AdventureWorks2008 節點。
(3) 展 開 “安全性”節點。
(4) 右 擊 “用戶”文件夾,選 擇 “新建用戶”命令,如圖6-6所示。
(5) 在 “用戶名”框中輸入Carol。 (6) 在 “登錄名”框中輸入Carol,或者使用“…”按鈕選擇她的登錄名。 (7) 在 “默認架構”框中輸入Sales。 (8) 單 擊 “確定”按鈕。
Carol在 AdventureWorks2008數據庫中有了一個數據庫用戶帳戶后,她就繼承了授予 公共數據庫角色的權限。數據庫角色和權限的內容將在本章稍后介紹。
CREATE USER 語句
我們也可以使用CREATE USER語句創建新的數據庫用戶。和 GUI相比,CREATE
USER語句對如何創建用戶提供了更多的選擇。例如,可以基於現有證書或密鑰創建用戶,
或甚至創建一個與登錄名無關聯的用戶。雖然很少需要實現這些類型的用戶,但他們不必
與某一特定登錄名關聯便可以直接訪問數據庫對象。這些用戶可以用來訪問有特定安全要
求的資源。例如,一個存儲過程可能含有EXECUTE AS子句,在這種情況下,通過與某一
特定證書或非對稱密鑰關聯的用戶運行該存儲過程。但是要注意,這些用戶只在創建了它
們的數據庫中才有效。如果他們試圖訪問另一個數據庫的資源,就會作為guest訪問其他數 據庫。如果其他數據庫禁用guest用戶,他們將無法訪問這些數據庫。
每個數據庫都默認創建兩個用戶。dbo用戶(也稱為數據庫所有者)擁有在數據庫中進行 任何操作的全部權限。固定服務器角色sysadmin的成員以及sa帳戶都映射到dbo.
sysadmin 創建的任何對象都自動為dbo所有。dbo用戶還是默認架構的所有者,該架構的名稱也是
dboo dbo用戶不能被刪除。
guest帳戶也存在於每個數據庫中,但默認是禁用的。當一個人能夠登錄訪問SQL Server,但是對數據庫沒有顯式用戶訪問權限時,通常就會使用guest帳戶。如果數據庫有 一個guest帳戶,且該帳戶被激活,那么登錄名就使用來賓訪問連接到數據庫。guest是public 角色的一個成員,擁有所有賦予該角色的權限,但也可以授予guest訪問安全對象的顯式 權限。
您可能注意到其他兩個“用戶”:sys和 INFORMATION_SCHEMA。雖然常規意義上 它們不是用戶,但是它們確實擁有數據庫中的對象,主要用於存儲和檢索數據。這些用戶
沒有映射到任何登錄名,而且默認是禁用的。
CREATE USER語句的語法和選項如下所示:
CREATE USER name [{{FOR | FROM} source | WITHOUT LOGIN}] [WITH DEFAULT_SCHEMA = schema_name]
表 6-7和表6-8介紹了可用的選項。
創建一個新用戶
現在看一下CREATE USER語句的實際使用。在之前的例子中,我們在AdventureWorks2008
數據庫中創建了一個名為C arol的 新 的 SQL Server登錄名和一個關聯用戶。如果想在 tempdb數據庫中為Carol創建一個用戶,可以執行如下語句:
USE tempdb; CREATE USER Carol;
GO
創建一個新用戶就是這么簡單。
再看另外一個例子。如果之前執行了 DROP LOGIN [AughtEight\Bob]語句,那么就需
要重新創建他的登錄名。這個例子中將創建一個名為BillyBob的數據庫用戶,它將映射到 Bob的登錄名,並將BillyBob的默認架構設置為Sales架構:
USE master; CREATE LOGIN [AughtEight\Bob] FROM WINDOWS; USE AdventureWorks2008; CREATE USER BillyBob FOR LOGIN [AughtEight\Bob] WITH DEFAULT_SCHEMA = sales;
最后的例子將顯示如何通過現有證書創建-個新的用戶。本章稍后會介紹證書,但在
這個例子中,首先創建證書,然后創建用戶:
USE AdventureWorks2008; CREATE CERTIFICATE SalesCert ENCRYPTION BY PASSWORD ='P@ssw0rd'
WITH SUBJECT = fSales Schema Certificate、 EXPIRYDATE =•12/31/2010•;
GO
CREATE USER SalesSecurity FOR CERTIFICATE SalesCert; GO
也可以使用ALTER USER語句來更改用戶帳戶。這里再次體現了 Transact-SQL的靈活性
比 Management Studio 大得多。ALTER SCHEMA 可用於修改 name 屬性和 DEFAULT SCHEMA
屬性。如果希望更改帳戶所關聯的Windows或 SQL登錄名,也可以使用LOGIN=選項。 要知道,LOGIN選項只能用於將用戶與和其最初創建時同類型的登錄名相關聯。對於作為
證書或密鑰創建的用戶,這個選項並不適用。下面的例子演示了這些選項:
USE AdventureWorks2008 ALTER USER SalesSecurity WITH NAME =SalesSchem.aSecurity;
GO
USE AdventureWorks2008 ALTER USER BillyBob WITH DEFAULT^SCHEMA =Production;
GO
--Create a new login USE master CREATE LOGIN TempCarol WITH PASSWORD = *MyPassword*, CHECK_POLICY =OFF;
GO
USE tempdb ALTER USER Carol WITH Login =TempCarol;
GO
最后,一旦一個用戶不再有用,可以使用DROP USER語句把它從數據庫中刪除。DROP
USER語句很簡單,如下所示:
USE AdventureWorks2008 DROP USER BillyBob; GO