在 Azure SQL 数据库中设置 datareader 角色,为什么会出现错误?

问题描述 投票:0回答:2

我真的很难将具有“基本”身份验证的只读用户添加到我的数据库中。 我当前登录的用户是 DbAdmin,所以我认为访问权限不应该是问题。

我正在运行以下 SQL 语句,但最后一个似乎给了我错误

“无法更改角色‘db_datareader’,因为它不存在或您没有权限。”

我做错了什么?

sql database azure azure-sql-database
2个回答
2
投票

您似乎正在对

master
数据库执行查询,而您无权将用户添加到
db_datareader
数据库中的
master
角色。

服务器管理员和 Azure AD 管理员帐户具有以下特征:

  1. 不要以

    dbo
    用户进入master数据库,在master中权限有限。

  2. 不是标准 SQL Server sysadmin 固定服务器角色的成员,该角色在 SQL 数据库中不可用。

因此,应在

master
数据库中创建 LOGIN,并在
YourDatabase
中添加 USER。然后在
db_datareader
中赋予
YourDatabase
角色。

请按照以下步骤操作:

  1. 在 SQL Server Management Service (SSMS) 中,以服务器管理员身份登录并连接到 master 数据库。运行以下命令。
CREATE LOGIN newLogin WITH PASSWORD = '<password>';
  1. 现在连接到数据库,您需要使用上面的登录名创建用户并运行下面的命令。
CREATE USER [newLogin]
FROM LOGIN [newLogin]
WITH DEFAULT_SCHEMA=dbo;
  1. 现在在同一数据库中运行以下命令,将
    db_datareader
    更改为新用户。
ALTER ROLE db_datareader ADD MEMBER [newLogin];

请参阅下面的输出图像:


0
投票

这对我来说完全不起作用。请帮忙。

我的用户已添加到 master 中的 ##MS_DatabaseManager## 角色。

我创建了一个新的登录名(在 master 中)。我创建了一个新用户用于登录(在数据库中)。

我尝试将该新用户添加到该数据库中的 db_datareader 角色,但不能。

-- create login in master
CREATE LOGIN my_new_login
WITH PASSWORD='something secret';

-- create user in database
CREATE USER my_new_user 
FOR LOGIN my_new_login
WITH DEFAULT_SCHEMA = dbo; 

-- add user to role(s) in database 
ALTER ROLE db_datareader ADD MEMBER my_new_user;

ERROR [40:1]:(SQLSTATE: S0001, SQLCODE: 15151): Cannot alter the role 
'db_datareader', because it does not exist or you do not have permission.
ALTER ROLE db_datareader ADD MEMBER my_new_user;

-- check the role and user exist in the database
SELECT name, type FROM sys.database_principals WHERE name in ('db_datareader', 'my_new_user');

my_new_user     S
db_datareader   R

-- check my database permissions
SELECT * FROM sys.fn_my_permissions(null, 'DATABASE') WHERE permission_name LIKE 'ALTER%ROLE';

database        ALTER ANY ROLE
database        ALTER ANY APPLICATION ROLE
© www.soinside.com 2019 - 2024. All rights reserved.