В чем разница между тем, чтобы быть владельцем db_owner и иметь GRANT ALL? - PullRequest
0 голосов
/ 06 октября 2011

Я использовал следующий SQL для создания пользователя, логина и базы данных.

USE master;
GO
CREATE DATABASE TEST;
GO
USE TEST;
GO
CREATE LOGIN TEST_USER WITH PASSWORD = 'password';
EXEC sp_defaultdb @loginame='TEST_USER', @defdb='TEST'
CREATE USER TEST_USER FOR LOGIN TEST_USER WITH DEFAULT_SCHEMA = DBO;
EXEC sp_addrolemember 'db_owner','TEST_USER'
GO
GRANT ALL TO TEST_USER;
GRANT ALTER ON SCHEMA::dbo TO TEST_USER
GO

Когда меня спросили, я не смог объяснить разницу между тем, чтобы сделать моего пользователя владельцем базы данных (для создания / изменения / удаления таблиц и т. Д.):

EXEC sp_addrolemember 'db_owner','TEST_USER'

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

GRANT ALL TO TEST_USER;

Они одинаковые? Или это правда, что моя мама всегда говорила: вы можете привести лошадь к воде, но это не делает его администратором?

Rob

:)

Ответы [ 2 ]

4 голосов
/ 06 октября 2011

Владельцам защищаемых прав не может быть отказано. Но пользователь, которому предоставлено ВСЕ, все еще может быть отклонен явным DENY на защищаемом (DENY имеет приоритет над всеми / любым GRANT). Таким образом, пользователь, являющийся членом группы Foo, может иметь ВСЕ разрешения, предоставляемые через членство в группе, но если он также является членом группы Bar, которой запрещен SELECT для таблицы X, то пользователю будет отказано в выборе из указанной таблицы. Если пользователь будет владельцем таблицы X, DENY не будет влиять на него. Это относится к любому объекту на любом уровне, включая владение базой данных и dbo.

Это будет разница между предоставлением ВСЕХ и владением, но учтите, что членство в фиксированной роли db_owners отличается от того, чтобы быть dbo. В частности, группы не владеют защищаемыми объектами, как пользователи (или, по крайней мере, так, как должно быть ... но я отвлекся).

2 голосов
/ 06 октября 2011

В дополнение к тому, что владелец защищен от DENY, в SQL Server GRANT ALL устарел и не предоставляет все возможные разрешения .(DENY ALL и REVOKE ALL также устарели.)

Эта опция устарела и поддерживается только для обратной совместимости.Он не предоставляет все возможные разрешения.Предоставление ALL эквивалентно предоставлению следующих разрешений.

  • Если защищаемое является базой данных, ALL означает BACKUP DATABASE, BACKUP LOG, CREATE DATABASE, CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATEПРАВИЛО, СОЗДАТЬ ТАБЛИЦУ и СОЗДАТЬ ВИД.

  • Если защищаемое является скалярной функцией, ВСЕ означает ВЫПОЛНИТЬ и ССЫЛКИ.

  • Если защищаемоеявляется табличной функцией, ALL означает DELETE, INSERT, REFERENCES, SELECT и UPDATE.

  • Если защищаемый объект является хранимой процедурой, ALL означает EXECUTE.

  • Если защищаемое является таблицей, ВСЕ означает УДАЛИТЬ, ВСТАВИТЬ, ССЫЛКИ, ВЫБРАТЬ и ОБНОВИТЬ.

  • Если защищаемое является представлением, ВСЕ означает УДАЛИТЬ, ВСТАВИТЬ, ССЫЛКИ, ВЫБРАТЬ И ОБНОВИТЬ.

И вы можете GRANT ALL без использования WITH GRANT OPTION.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...