在 SQL Server 2008 中在数据库级别创建用户的目的是什么。如果您扩展一些数据库 - 安全性 - 用户并且如果您以这种方式添加用户,您将无法使用相同的用户登录到 SQL Server。那么在数据库级别创建用户的目的是什么?
2 回答
登录和用户之间是有区别的。必须先创建登录名,然后才能将该登录名作为用户添加到数据库中。
Security > Logins 是所有可以登录系统的用户。登录名具有密码,并且至少具有 Public 角色。SecurityAdmin 角色或更高级别的成员可以编辑登录名。如您所见,securityadmins(和更高级别)可以编辑登录的细粒度权限。管理员可以编辑登录名的密码和数据库访问权限。
MyDatabase > Security > Users 拥有该特定数据库的所有用户信息,但不允许您编辑登录权限。
如果您的数据库上有 DBO,但系统上没有 Admin,则您只能编辑数据库上的用户权限。您无法管理用户对其他数据库的访问权限或其密码。
可以以编程方式说明添加登录名并将其分配给数据库。安全管理员会这样做:
CREATE LOGIN MyUser WITH PASSWORD = 'MyPassword'
这个登录现在存在于我们的 SQL 服务器实例中,但没有权限,也不是任何数据库的用户。
将该用户添加到数据库特定数据库的所有者将为该登录创建一个用户:
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
必须创建登录才能访问 SQL 实例。登录名可以被授予服务器角色,因此他们可以执行诸如管理安全性或成为管理员之类的事情。
登录名映射到数据库中的用户。每个数据库都授予此用户或用户所属角色的权限。
登录也可以通过来宾用户访问数据库。
当然,有关于此的文档。