sql - 在数据库级别创建用户

标签 sql sql-server sql-server-2008

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

最佳答案

登录和用户之间是有区别的。一个 登录 必须先创建,然后才能将该登录名作为 添加到数据库中。用户 .

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 - 在数据库级别创建用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16949631/

相关文章:

sql-server-2008 - 在 SQL Server 2008 中使用 Hibernate

sql - Oracle SQL-如何检索列的前5个值

MySQL:每组最大的 n 连接和条件

sql - 将选择结果作为存储过程的参数传递

sql - 复杂的 Order By 条款?

sql - 关于SQL中的全文查询

sql - 如何在 SQL 中返回具有重复非唯一查询值的多行?

sql - 在 Postgres 中爬升父/子数据库关系

sql - 合并到多个更新和插入

sql-server - 如何从 TIMESTAMP 列中获取日期/时间信息?