Как проверить все права доступа для конкретного пользователя в базе данных SQL Azure? - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть ниже вопросы о схеме / привилегиях:

  1. Может ли пользователь иметь несколько ролей БД (схема)?
  2. Для чего используется db_denydatareader?(кажется, у разных баз данных могут быть разные роли БД, верно?)
  3. В чем разница между db_datareader и db_denydatawriter, если пользователь хочет только читать данные в конкретной базе данных?
  4. Я пыталсяотзывать SELECT прямо из схемы (TestUser со схемой по умолчанию db_datareader), почему он все еще может искать таблицы?

    REVOKE SELECT ON SCHEMA::db_datareader TO TestUser;
    
  5. Как я могу предоставить права на выбор и обновление только для нескольких таблицпользователь, но не все таблицы?(т.е. нет прав на удаление и вставку)

  6. Что означают эти системные привилегии, которые я не смог найти в таблице sys.objects?

    select * from sys.database_permissions where major_id <= 0;
    

Спасибо.

1 Ответ

0 голосов
/ 01 февраля 2019

Кажется, вы думаете, что схемы и роли одинаковы, но они не одинаковы.Роли являются контейнерами безопасности, участник может быть членом роли.Схемы содержат объекты, связанные со схемой базы данных, они помогают группировать объекты базы данных вместе и принадлежат принципалу.Когда вы создаете нового пользователя, вы можете выбрать его схему по умолчанию, добавить его к определенным ролям и предоставить ему право собственности на схемы.

Члены фиксированной роли базы данных db_denydatareader не могут читать какие-либо данные в таблицах пользователей в базе данных..

О разнице между db_datareader и db_denydatawriter.Db_datareader предоставляет права выбора для всех таблиц, и это не влияет на любые разрешения на вставку, обновление, удаление.Между тем db_denydatawriter запрещает вставку, обновление и удаление разрешений для всех таблиц, запрещает вносить какие-либо изменения в любую таблицу.Даже если кому-то будут предоставлены разрешения на вставку напрямую, они все равно не смогут его вставить, потому что запрещают предоставление отмены.Назначение пользователя роли db_denydatawriter означает, что он никогда не сможет вносить какие-либо изменения в базу данных, независимо от того, какие другие разрешения у него есть.Запрет имеет приоритет над предоставлением.

Что касается вопроса №4, вы можете сгруппировать таблицы по схемам и затем получить разрешение DENY SELECT по схеме для участника или пользователя.db_datareader - это фиксированная роль базы данных, и она не является схемой.

DENY SELECT ON schema::[SchemaName] TO [user_name]

Аналогичным образом вы можете предоставлять разрешения SELECT и UPDATE для схемы в базе данных, содержащей группу таблиц.

GRANT SELECT, UPDATE on SCHEMA::SchemaName TO [user_name]

Вы можете найти список ролей базы данных здесь .

...