我真的很难将具有“基本”身份验证的只读用户添加到我的数据库中。 我当前登录的用户是 DbAdmin,所以我认为访问权限不应该是问题。
我正在运行以下 SQL 语句,但最后一个似乎给了我错误
“无法更改角色‘db_datareader’,因为它不存在或您没有权限。”
我做错了什么?
您似乎正在对
master
数据库执行查询,而您无权将用户添加到 db_datareader
数据库中的 master
角色。
服务器管理员和 Azure AD 管理员帐户具有以下特征:
不要以
dbo
用户进入master数据库,在master中权限有限。
不是标准 SQL Server sysadmin 固定服务器角色的成员,该角色在 SQL 数据库中不可用。
因此,应在
master
数据库中创建 LOGIN,并在 YourDatabase
中添加 USER。然后在 db_datareader
中赋予 YourDatabase
角色。
请按照以下步骤操作:
CREATE LOGIN newLogin WITH PASSWORD = '<password>';
CREATE USER [newLogin]
FROM LOGIN [newLogin]
WITH DEFAULT_SCHEMA=dbo;
db_datareader
更改为新用户。ALTER ROLE db_datareader ADD MEMBER [newLogin];
请参阅下面的输出图像:
这对我来说完全不起作用。请帮忙。
我的用户已添加到 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