Это плохая идея. Теперь читайте дальше.
Нет никакого способа сделать это из коробки. Опытные пользователи (учетные записи с правами CREATE ANY, ALTER ANY и т. Д.) Могут это делать, но это потому, что у них есть права на любую схему, а не только на вашу.
Причина этого заключается просто в том, что модель безопасности Oracle работает на уровне schema.object
, и никто никогда не придумал веских причин для введения привилегий на уровне schema
. Выбор новых функций Oracle во многом зависит от того, что хотят платящие клиенты или что, по мнению Oracle, может привлечь новых платящих клиентов.
Так что это не может быть сделано, потому что, по сути, вряд ли кто-то когда-либо хотел делать то, что вы хотите. И никто не хочет этого делать, потому что это вообще плохая идея. Способность контролировать наши схемы, осуществлять управление нашими данными и нашей бизнес-логикой - очень мощная вещь. Предоставление доступа ко всем объектам в нашей схеме - особенно для создания или изменения этих объектов - это то, что следует делать как можно реже и как можно более узко.
Но, если ваше сердце настроено на этот курс, вот набросок того, как это сделать.
- создать сценарий для предоставления (всем?) Привилегий (всем?) Объектам в вашей схеме именованному пользователю, исходя из представления словаря данных, USER_OBJECTS.
- создать пакет, который динамически выполняет DDL (например, CREATE TABLE, ALTER TABLE и т. Д.). Предоставить выполнение этого пакета указанному пользователю.
- написать триггер AFTER CREATE для этой схемы, который предоставляет привилегии созданным объектам для указанного пользователя.
Вместо именованного пользователя вы можете использовать роль, особенно если вы хотите, чтобы в вашей схеме было много людей, создающих хаос.
Веселись!