владелец схемы не может создать таблицу

Я новичок в SQL DW, но имею некоторый опыт работы с БД

Я пытаюсь создать пользователей (3) с разными правами, но хочу ограничить их одной схемой «dep». так что я сделал следующее.

1) войдите в БД с идентификатором суперадминистратора. затем выполнил следующие команды. все они работали нормально

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 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.


person Rakesh Prasad    schedule 29.10.2019    source источник
comment
Привет, если мой ответ был для вас полезен, не могли бы вы принять его (отметить) или проголосовать за него? Это может быть полезно для других членов сообщества. Спасибо.   -  person Leon Yue    schedule 31.10.2019


Ответы (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». Вот почему вы можете только войти в базу данных, но не имеете прав на 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. Управление базой данных и предоставление доступа к базе данных SQL и SQL Хранилище данных.
  2. Роли на уровне базы данных

Надеюсь это поможет.

person Leon Yue    schedule 30.10.2019
comment
Только создать таблицу в схеме dep? EXEC sp_addrolemember 'db_owner', 'dep_ingestion_owner_user'; db_owner only in schema dep? - person Kiquenet; 23.09.2020