Sql 只读访问权限

Sql readonly access permissions

我有一个 SQL 服务器数据库,我想在其中添加一个只读用户,它在数据库中应该只有只读权限。

我设法通过访问服务器创建了这个用户,在主机上我 运行 这个命令:

CREATE LOGIN reader WITH password='YourPWD';

CREATE USER readerUser FROM LOGIN reader;

EXEC sp_addrolemember 'db_datareader', 'readerUser';

如果我想创建一个新的 table,这项工作就很好 table 我得到了我没有足够权限的错误。但问题是我也没有足够的权限阅读。

事实上,如果我尝试 select 我得到这个错误:

The SELECT permission was denied on the object '', database '', schema ''.

显然,我的代码 运行 没有提供只读权限,但它确实限制了该用户的所有权限。

任何人都可以帮助理解我做错了什么以及如何为该用户设置只读权限以便我可以 select 和检索数据但不创建 table 等?

编辑:

EXEC sp_addlogin 'account_name', 'password', 'database_name'

USE database_name

CREATE USER 'account_name' FOR LOGIN 'account_name'

EXEC sp_addrolemember 'db_datareader', 'account_name'

go

您在 master 中创建了 USER,而不是您需要的数据库。您的脚本应如下所示:

USE master;
GO
CREATE LOGIN reader WITH password='SecurePassword';
GO
USE YourDatabase; --Obviously replace:
GO
CREATE USER reader FOR LOGIN reader;
ALTER ROLE db_datareader ADD MEMBER reader;
GO

事实证明,根据评论,OP 使用的是 Azure SQL 数据库 而不是 SQL 服务器实例,因此创建了 LOGIN 无关紧要。相反,您需要首先连接到正确的数据库,not master,然后创建您的 USER:

CREATE USER reader WITH PASSWORD = N'SecurePassword';
ALTER ROLE db_datareader ADD MEMBER reader;