Предоставить доступ ко всем таблицам базы данных

13

Недавно я хотел поделиться правами обычного доступа с одним пользователем сервера и понял, что простые команды CREATE USERи GRANT ALL ON DATABASEкоманды не позволяют ему запускать простые SELECTданные.

Я хотел бы предоставить права на все таблицы из данной базы данных указанному пользователю, но я не уверен, что это лучшая идея предоставить ему доступ ко всей схеме, так publicкак я не знаю, позволит ли это какую-то привилегию эскалация. Есть ли другой способ?

d33tah
источник
Почему ты не можешь просто GRANT SELECT ON TableName TO [Domain\User]? Я обычно просто назначаю пользователей на db_datareaderроль, если все, что им нужно, это доступ на чтение ко всем таблицам, но я не уверен, насколько гранулярным вы хотите быть.
Крис Груттемейер
Я хотел бы предоставить все CRUD для всех таблиц в базе данных. Кроме того, DROPping и CREATEing внутри этой базы данных также могут оказаться полезными.
d33tah

Ответы:

19

Привилегия DATABASEтолько предоставляет общие права подключения к базе данных и не более. Пользователь с такой привилегией может видеть только то, что разрешено видеть широкой публике.

Чтобы предоставить доступ на чтение всем таблицам , вам также необходимы права доступа ко всем схемам и таблицам:

GRANT USAGE ON SCHEMA public TO myuser; -- more schemas?
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;

Вы также можете установить привилегии по умолчанию для будущих схем и таблиц. Запуск для каждой роли, которая создает объекты в вашей БД

ALTER DEFAULT PRIVILEGES FOR ROLE mycreating_user IN SCHEMA public
GRANT SELECT ON TABLES TO myuser;

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

Эрвин Брандштеттер
источник
Это myusrопечатка? Не должно ли это быть myuser?
attomos
1
@attomos: в этом примере это должен быть другой пользователь. Я пояснил.
Эрвин Брандштеттер