找不到用户,因为它不存在或您没有权限

Ele*_*eer 2 sql-server permissions

我正在使用 mssql,我想实现这一目标:拥有 1 个数据库,2 个非 SA 用户。第一个用户应该是数据库的所有者,第二个用户应该对某些表具有读取权限,对其他表具有读+写权限。

第二个用户的表是由我们使用第一个用户的应用程序创建的。

我所做的步骤:
1)我执行创建 DB + 用户的脚本

CREATE LOGIN USER1
WITH PASSWORD = 'password';
GO
CREATE USER USER1 FOR LOGIN USER1;
GO

CREATE DATABASE my_database;
ALTER AUTHORIZATION ON DATABASE ::my_database TO USER1;

CREATE LOGIN USER2
WITH PASSWORD = 'password';
GO
CREATE USER USER2 FOR LOGIN USER2;
GO
Run Code Online (Sandbox Code Playgroud)

2) 我的应用程序执行创建表的脚本 + 向 USER2 授予对表的权限,这失败了,因为:

Cannot find the user 'USER2', because it does not exist or you do not 
have permission.
Run Code Online (Sandbox Code Playgroud)

我的问题是如何授予 USER1 权限以在 my_database 中为其他用户添加读/写权限?不过,那个数据库所有者就足够了。

例如我如何向 USER2 授予权限:

GRANT SELECT ON OBJECT ::schema_version TO USER2;
Run Code Online (Sandbox Code Playgroud)

Ste*_*Bov 5

您已经为 user1 和 user2 创建了到 master 数据库的登录名,而不是您想要的数据库。

重新排列为:

CREATE LOGIN USER1
WITH PASSWORD = 'password';
GO

CREATE DATABASE my_database;
ALTER AUTHORIZATION ON DATABASE ::my_database TO USER1;

CREATE LOGIN USER2
WITH PASSWORD = 'password';
GO
USE my_database;
GO
CREATE USER USER2 FOR LOGIN USER2;
GO
Run Code Online (Sandbox Code Playgroud)

然后,您可以向该用户添加权限,因为该用户将存在于该数据库中。

注意:您可能想要进入您的主数据库(或您之前运行这些命令的任何数据库)并删除 USER1 和 USER2