我是SQL DW的新手,但是对数据库有一定的经验
我正在尝试创建具有不同权限的用户(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查看架构名称和用户。
现在我正在尝试使用用户标识“ dep_ingestion_owner_login”登录,并将数据库选择为=> 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));
Msg 6004,第14级,状态9,第1行用户无权执行此操作。将数据库上下文更改为“ db-testing”。
根据您的代码,您已经在数据库“ 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”。这就是为什么您只能登录数据库但没有SELECT,INSERT,UPDATE,DELETE权限的原因。
您应该添加此代码以将用户授予“ 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
请参考:
希望这会有所帮助。