在数据库级别创建用户

时间:2013-06-05 20:50:47

标签: sql sql-server sql-server-2008

在SQL Server 2008中在数据库级别创建用户的目的是什么。如果展开某些数据库 - 安全 - 用户,并且如果以这种方式添加用户,则无法使用同一用户登录到SQL Server。那么在数据库级别创建用户的目的是什么?

2 个答案:

答案 0 :(得分:3)

登录和用户之间存在差异。必须先创建登录,然后才能将该登录信息作为用户添加到数据库中。

安全>登录是可以登录系统的所有用户。登录具有密码,至少具有公共角色。 SecurityAdmin角色的成员或更高版本可以编辑登录。如您所见,securityadmins(及更高版本)可以编辑登录的细化权限。管理员可以编辑登录的密码和数据库访问权限。

MyDatabase>安全>用户拥有该特定数据库的所有用户信息,但不允许您编辑登录权限。

如果您的数据库上有DBO,但系统上没有Admin,则只能编辑数据库的用户权限。您无法管理用户对其他数据库的访问权限或密码。

可以以编程方式说明添加登录并将其分配给数据库。 securityadmin会这样做:

CREATE LOGIN MyUser WITH PASSWORD = 'MyPassword'

此登录现在存在于我们的SQL Server实例中,但没有权限,也不是任何数据库的用户。

将该用户添加到数据库中特定数据库的所有者将为该LOGIN创建一个USER:

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

答案 1 :(得分:2)

必须创建登录才能访问SQL实例。登录可以被授予服务器角色,因此他们可以执行管理安全性或管理员等操作。

登录映射到数据库中的用户。在此用户或每个用户所属的角色上为每个数据库授予权限。

登录也可能通过访客用户拥有数据库的权限。

当然有documentation on this