Sql只读访问权限



我有一个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

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

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

最新更新