授予对数据库的 SQL Server 登录访问权限 - SQL Server

Posted

技术标签:

【中文标题】授予对数据库的 SQL Server 登录访问权限 - SQL Server【英文标题】:Granting a SQL Server Login Access to a Database - SQL Server 【发布时间】:2011-02-20 22:40:05 【问题描述】:

我想为 SQL Server 登录授予对数据库的访问权限。我知道 sp_grantdbaccess,但它已被弃用。我可以改用什么?如何检查登录名是否还没有访问数据库的权限?

场景:UserA 创建数据库 - 在 sys.database_principals 我有一个名为 dbo 和 UserA sid 的条目。我尝试再次授予 UserA 权限:我尝试通过 name='UserA' 在 sys.database_principals 上进行选择,但是由于名称是 dbo 而不是 UserA,我收到错误 - '登录已经有一个不同用户名下的帐户.'.在没有 sid 的情况下如何确定用户是否具有数据库访问权限?

【问题讨论】:

【参考方案1】:

你可能想要CREATE USER

例如

CREATE USER bobuser FOR LOGIN boblogin

sys.database_principals 安全目录有一个数据库用户列表,因此您可以确保您没有同名的用户。

【讨论】:

如果用户已经拥有数据库访问权限,则会返回错误。如何验证用户是否具有数据库访问权限? 你可以先运行if not exists(select * from sys.database_principals where name='bobuser') begin create user...之类的查询,看看它是否存在【参考方案2】:

首先,您需要在该数据库中为相关登录创建一个用户。为此,请使用Create User。如果要确定用户是否已经存在,可以通过过滤type = 'U' 来使用sys.database_principals 目录视图。如果要确定给定用户是否已经在某个角色中,可以使用sys.database_role_members

【讨论】:

以上是关于授予对数据库的 SQL Server 登录访问权限 - SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server - 如何将所有数据库的读取权限授予登录名?

如何授予用户对 SQL Server 中数据库的读取权限?

SQL Server 授予的权限不起作用

SQL Server查看login所授予的具体权限

授予数据库的完整 SQL Server 权限

用户访问数据库的权限有哪几种?