2011-02-28 185 views
2

我創建一個登錄:sp_addsrvrolemember 'dbcreator'在SQL Server中創建用戶,登錄名和授予權限

這會自動創建登錄鮑勃下的用戶&具有相同的:bob

我使用准許他創建數據庫名稱作爲登錄名。

Login - bob 
user- bob 

是在主數據庫中創建用戶?

我執行了此查詢:select * from sysusers,但我找不到任何名爲'bob'的用戶。爲什麼這樣?

'bob'有權限創建數據庫。

現在我想授予他創建表的權限。所以我該怎麼做? 當我正在使用授權,然後它說找不到用戶'鮑勃'?爲什麼這樣?

grant create table to bob 

之後,我連接與登錄「鮑勃」 SQL服務器然後,我創建一個數據庫:bobdb 我進入bobdb。 現在,如何給bobdb創建表權限bobdb

我需要添加一個新用戶嗎?

回答

5

登錄位於服務器級別 - 您在服務器上登錄。

用戶位於數據庫級別 - 您可以爲每個單獨的數據庫中的單次登錄定義一個不同的用戶。

該用戶是在當你運行創建用戶....聲明說,當前活動的數據庫中創建...

所以,如果你是在SSMS的master數據庫時,你跑了查詢 - 是的,則該用戶在master數據庫被成功創建,不存在其他任何地方......

2

連接到任何數據庫作爲自己......

CREATE LOGIN Bob WITH PASSWORD='<the password>'; 

,創建一個服務器級別的登錄只有權限連接到任何數據庫作爲訪客用戶。現在添加登錄服務器級別 dbcreator角色並連接到服務器作爲鮑勃

發行創建數據庫,您仍將只有一個登錄名爲鮑勃。那登錄將擁有數據庫,您可以通過運行此命令來驗證數據庫...

SELECT sp.name AS LoginName, dp.name AS UserName 
FROM bobdb.sys.database_principals AS dp 
     INNER JOIN sys.server_principals AS sp ON dp.sid = sp.sid 
WHERE sp.name = 'Bob' 
; 

因爲鮑勃登錄擁有數據庫,他應該能夠運行大多數DDL爲該數據庫命令。如果登錄擁有數據庫,則該登錄可以在該數據庫內執行任何操作,包括創建表。明確

授予權用戶bobdb內鮑勃如果更改數據庫所有者(ALTER AUTHORIZATION ON DATABASE :: bobdb TO LoginNameOfNewOwner)比鮑勃以外的帳戶將是適當的。然後,Bob可以被添加爲用戶,該用戶也被命名爲Bob,然後僅授予該用戶他需要的最小權限。

欲瞭解更多信息,請參閱db_owner in Books Online

還鏈接到頁面的部分,之後SQL 2000,請參閱new system catalog views sysusers已過時。

最後,K. Brian Kelly在SSC網站上發佈了login/user mapping的好摘要。

+0

先生我如何賦予鮑勃權利創建表? – sqlchild 2011-03-01 06:41:45

+0

,我的問題的一半仍然沒有答案 – sqlchild 2011-03-01 06:42:12

+1

您的授權命令是正確的,但它不起作用的原因是因爲Bob *登錄*是數據庫中的dbo *用戶*。沒有*數據庫用戶*名爲bob和**創建用戶Bob從LOGIN Bob **將收到一條錯誤消息(**消息15063,級別16,狀態1,行1登錄已經有一個帳戶在不同的用戶名下。**)現在在數據庫中作爲* user * dbo操作的Bob *登錄*應該已經擁有創建表的權限。您只需要使用** CREATE USER **和**授予CREATE TABLE TO **給除Bob以外的數據庫*用戶*。 – 2011-03-02 10:41:35

相關問題