架构所有者无法创建 table
schema owner is not able to create table
我是 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-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'.
根据您的代码,您已经在数据库 "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
请参考:
希望对您有所帮助。
我是 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-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'.
根据您的代码,您已经在数据库 "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
请参考:
希望对您有所帮助。