模式所有者无法创建表

问题描述 投票:0回答:1

我是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”。

azure azure-sql-database azure-sql-data-warehouse
1个回答
0
投票

根据您的代码,您已经在数据库“ 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

请参考:

  1. Controlling and granting database access to SQL Database and SQL Data Warehouse
  2. Database-Level Roles

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.