2013-06-05 57 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