在SQL Server 2008中在数据库级别创建用户的目的是什么。如果展开某些数据库 - 安全 - 用户,并且如果以这种方式添加用户,则无法使用同一用户登录到SQL Server。那么在数据库级别创建用户的目的是什么?
答案 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实例。登录可以被授予服务器角色,因此他们可以执行管理安全性或管理员等操作。
登录映射到数据库中的用户。在此用户或每个用户所属的角色上为每个数据库授予权限。
登录也可能通过访客用户拥有数据库的权限。