Нет простого способа сделать это (ни в стандарте SQL, ни в Informix), но обычно это не требуется, поскольку эта конкретная привилегия обычно предоставляется по умолчанию. Однако я полагаю, что на самом деле вы тоже хотите выполнять более общие операции и знать, какие есть варианты.
В зависимости от того, что вы хотите сделать, и от того, как настроена ваша система, вы можете достичь своих целей различными способами.
Грубая сила - прямой ответ на вопрос
SELECT 'GRANT SELECT ON "' || TRIM(owner) || '".' || TRIM(tabname) ||
' TO someuser AS dba;'
FROM "informix".systables
WHERE tabid >= 100;
Возьмите вывод этого и запишите его в программу. Я использую SQLCMD для работы, не в последнюю очередь потому, что она не генерирует нежелательный вывод:
sqlcmd -d dbname -e "
SELECT 'GRANT SELECT ON \"' || TRIM(owner) || '\".' || TRIM(tabname) ||
' TO someuser AS dba;'
FROM "informix".systables
WHERE tabid >= 100;" |
sqlcmd -d dbname -f -
Дополнительные обратные слеши необходимы для работы с оболочкой. Опции '-f -
' не являются строго необходимыми, но делают явным, что второй SQLCMD будет читать со стандартного ввода Если вы используете DB-Access, вам нужно беспокоиться о словоблудии, которое оно генерирует - именно поэтому я и написал SQLCMD.
Очевидно, что это решение может быть легко подготовлено и обобщено - вам просто нужно быть осторожным с использованием кавычек.
Использование ролей
Другой вариант - создать роль, обладающую всеми необходимыми разрешениями, а затем предоставить эту роль пользователям по мере необходимости. Недостатком этого является то, что вашему программному обеспечению необходимо установить роль, чтобы люди, подключающиеся, имели эту привилегию. Одна из возможностей - установить роль только для выбора в качестве роли по умолчанию для каждого пользователя.
Использование Server Studio Java Edition
SSJE имеет инструменты управления привилегиями для упрощения этой задачи.
Использование Open Admin Too
OAT содержит инструменты для управления привилегиями.