0

我是 SQL DW 的新手,但对 DB 有一些经验

我正在尝试创建具有不同权限的用户 (3),但希望将它们限制为一个模式“dep”。所以我做了以下。

1) 使用超级管理员 ID 登录数据库。然后运行以下命令。他们都工作得很好

enter code here---main db
CREATE LOGIN dep_ingestion_owner_login WITH PASSWORD = 'XXXXXXXXXXXXXXX';
CREATE LOGIN dep_ingestion_rw_login WITH PASSWORD = 'XXXXXXXXXXXXXXX';
CREATE LOGIN dep_ingestion_ro_login WITH PASSWORD = 'XXXXXXXXXXXXXXX';
go

---inside db "db-testing"
CREATE SCHEMA dep;
create user dep_ingestion_owner_user for login dep_ingestion_owner_login;
create user dep_ingestion_rw_user for login dep_ingestion_rw_login;
create user dep_ingestion_ro_user for login dep_ingestion_ro_login;
ALTER AUTHORIZATION ON SCHEMA::dep to dep_ingestion_owner_user;
go

GRANT SELECT,INSERT,UPDATE,DELETE ON SCHEMA :: dep TO dep_ingestion_rw_user WITH GRANT OPTION;
GRANT SELECT ON SCHEMA :: dep TO dep_ingestion_ro_user WITH GRANT OPTION;
go

我可以通过 SSMS 查看架构名称和用户。

现在我正在尝试使用用户 ID“ dep_ingestion_owner_login ”登录并选择 db as => db-testing

登录工作得很好。但以下命令给了我错误。

CREATE TABLE depletions_ke.Sizes (ChainID int, width dec(10,2));

我也尝试了不同的排列,但得到了同样的错误。

CREATE TABLE [db-testing].depletions_ke.Sizes (ChainID int, width dec(10,2));

消息 6004,级别 14,状态 9,第 1 行用户无权执行此操作。将数据库上下文更改为“db-testing”。

4

1 回答 1

1

根据您的代码,您已经在数据库“db-testing”中创建了三个登录名和三个用户的映射。

您创建了一个架构“ dep”。当一个新用户在没有指定架构的情况下创建时,它将具有默认架构“ dbo”。

所以这三个用户都具有相同的架构dbo

" ALTER AUTHORIZATION ON SCHEMA::dep to dep_ingestion_owner_user" 表示将架构的所有权转移dep给用户dep_ingestion_owner_user

模式是数据库对象的集合,包括表、视图、触发器、存储过程、索引等。模式与称为模式所有者的用户名相关联,该用户名是逻辑相关数据库对象的所有者。

模式所有者并不意味着它是数据库所有者

您没有授予用户dep_ingestion_owner_user任何数据库角色,例如“db_owner”。这就是为什么您只能登录数据库而没有选择、插入、更新、删除权限的原因。

您应该添加此代码以授予用户为“db_owner”:

EXEC sp_addrolemember 'db_owner', 'dep_ingestion_owner_user';

你的完整代码应该是这样的:

enter code here---main db
CREATE LOGIN dep_ingestion_owner_login WITH PASSWORD = 'XXXXXXXXXXXXXXX';
CREATE LOGIN dep_ingestion_rw_login WITH PASSWORD = 'XXXXXXXXXXXXXXX';
CREATE LOGIN dep_ingestion_ro_login WITH PASSWORD = 'XXXXXXXXXXXXXXX';
go

---inside db "db-testing"
CREATE SCHEMA dep;
create user dep_ingestion_owner_user for login dep_ingestion_owner_login;
create user dep_ingestion_rw_user for login dep_ingestion_rw_login;
create user dep_ingestion_ro_user for login dep_ingestion_ro_login;
ALTER AUTHORIZATION ON SCHEMA::dep to dep_ingestion_owner_user;
EXEC sp_addrolemember 'db_owner', 'dep_ingestion_owner_user';
go

GRANT SELECT,INSERT,UPDATE,DELETE ON SCHEMA :: dep TO dep_ingestion_rw_user WITH GRANT OPTION;
GRANT SELECT ON SCHEMA :: dep TO dep_ingestion_ro_user WITH GRANT OPTION;
go

请参考:

  1. 控制和授予对 SQL 数据库和 SQL 数据仓库的数据库访问权限
  2. 数据库级角色

希望这可以帮助。

于 2019-10-30T06:26:10.827 回答