2013-06-05 75 views
3

在SQL Server 2008的數據庫級別創建用戶的目的是什麼。如果展開某些數據庫 - 安全性 - 用戶,並且以這種方式添加用戶,則無法用同一用戶登錄到SQL Server。那麼,在數據庫級別創建用戶的目的是什麼?在數據庫級別創建用戶

回答

3

登錄和用戶之間有區別。必須先創建一個登錄,然後才能將登錄名作爲用戶添加到數據庫中。

安全性>登錄是可以登錄系統的所有用戶。登錄有一個密碼,至少有公共角色。 SecurityAdmin角色或更高級別的成員可以編輯登錄名。如您所見,securityadmins(及更高版本)可以編輯登錄的精細權限。管理員可以編輯登錄的密碼和數據庫訪問權限。

MyDatabase> Security>用戶擁有該特定數據庫的所有用戶信息,但不允許您編輯登錄權限。

如果您的數據庫上有DBO,但系統上沒有Admin,則只能編輯數據庫上的用戶權限。您無法管理用戶對其他數據庫或其密碼的訪問權限。

添加登錄並將它們分配給數據庫可以用編程方式說明。 一個是securityadmin這樣做:

CREATE LOGIN MyUser WITH PASSWORD = 'MyPassword' 

此登錄現在存在於我們的SQL Server實例,但沒有權限,並且沒有任何數據庫的用戶。

將該用戶添加到特定數據庫的數據庫世界所有者將創建該登錄一個用戶:

CREATE USER MyUser FOR LOGIN MyUser 

下面是創建登錄的更多高級選項:

if not exists (select * from master.dbo.syslogins where loginname = N'MyUser') 
BEGIN 
    declare @logindb nvarchar(132), @loginlang nvarchar(132) select @logindb = N'master', @loginlang = N'us_english' 
    if @logindb is null or not exists (select * from master.dbo.sysdatabases where name = @logindb) 
     select @logindb = N'master' 
    if @loginlang is null or (not exists (select * from master.dbo.syslanguages where name = @loginlang) and @loginlang <> N'us_english') 
     select @loginlang = @@language 
    CREATE LOGIN MyUser WITH PASSWORD = 'MyPassword', CHECK_POLICY = OFF 
END 
GO 

這裏有更多的高級選項將用戶添加到數據庫並賦予其db_owner角色:

if not exists (select * from dbo.sysusers where name = N'MyUser' and uid < 16382) 
    EXEC sp_grantdbaccess N'MyUser', N'MyUser' 
GO 

exec sp_addrolemember N'db_owner', N'MyUser' 
GO 
+0

好的,在此考試中我可以使用MyUser登錄登錄到SQL服務器,但是在數據庫xy上,我將把權限分配給用戶MyUser? – user2457382

+0

是的,有點。第二個代碼塊將用戶添加到數據庫xy,但它還沒有權限。我希望CREATE USER FOR LOGIN能說明你不得不把登錄名作爲用戶添加到數據庫xy中。 – BClaydon

2

必須創建登錄才能訪問SQL實例。登錄可以被授予服務器角色,因此他們可以執行管理安全性或成爲管理員等任務。

登錄被映射到數據庫中的用戶。權限是根據此用戶上的每個數據庫或用戶所屬的角色授予的。

登錄名也可能通過訪客用戶有權訪問數據庫。當然,documentation on this