Sql只读访问权限

时间:2021-05-25 15:48:54

标签: sql azure-sql-database

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

我设法通过访问服务器并在主服务器上运行此命令来创建此用户:

CREATE LOGIN reader WITH password='YourPWD';

CREATE USER readerUser FROM LOGIN reader;

EXEC sp_addrolemember 'db_datareader', 'readerUser';

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

事实上,如果我尝试选择某些内容,则会出现此错误:

<块引用>

对象 ''、数据库 ''、架构 '' 的 SELECT 权限被拒绝。

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

任何人都可以帮助了解我做错了什么,以及如何为此用户设置只读权限,以便我可以选择和检索数据但不能创建表等?

编辑:

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

1 个答案:

答案 0 :(得分:2)

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

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 Server 实例,因此创建 LOGIN 是无关紧要的。相反,您需要首先连接到正确的数据库,不是 master,然后创建您的 USER

CREATE USER reader WITH PASSWORD = N'SecurePassword';
ALTER ROLE db_datareader ADD MEMBER reader;
相关问题