Oracle SQLPlus вопрос - запись строк в текстовый файл - PullRequest
0 голосов
/ 20 июля 2011

Я пытаюсь записать команду sql в файл sql, чтобы сам вывод можно было использовать в качестве сценария. В основном используется сценарий для создания вывода, который сам отформатирован в исполняемый сценарий. Может быть, это излишне, но я не смог придумать лучшего способа. Я мог бы использовать дополнительный набор глаз (или идей), если это возможно. Спасибо

Вот сценарий:

CONNECT &&master_user/&&master_pwd.@&&tns_alias
SET LINESIZE 132 PAGESIZE 0 ECHO OFF FEEDBACK OFF
SET VERIFY OFF HEAD OFF TERM OFF TRIMSPOOL ON
SPO syns_list.sql
--GRANT CREATE ANY SYNONYM TO &&syn_user;//how is this line formed?
select  'create or replace synonym ' || table_name ||
' for ' || '&&master_user..' ||
table_name || ';'
from user_tables
order by table_name asc;
--REVOKE CREATE ANY SYNONYM FROM &&syn_user;//how is this line formed?
SPO OFF;
SET ECHO ON FEEDBACK ON VERIFY ON HEAD ON TERM ON;
exit

Это вывод:

//need the "grant" line here
create or replace synonym AGENTS for webdemo_admin.AGENTS;
create or replace synonym CONSTRUCTION_COMPANY for webdemo_admin.CONSTRUCTION_COMPANY;
create or replace synonym CONTRACT for webdemo_admin.CONTRACT;
create or replace synonym CUSTOMERS for webdemo_admin.CUSTOMERS;
create or replace synonym CUSTOMER_INTEREST for webdemo_admin.CUSTOMER_INTEREST;
create or replace synonym FEATURE for webdemo_admin.FEATURE;
create or replace synonym HOME for webdemo_admin.HOME;
create or replace synonym HOME_NONSTD_FEATURE for webdemo_admin.HOME_NONSTD_FEATURE;
create or replace synonym INTEREST for webdemo_admin.INTEREST;
create or replace synonym NON_STD_FEATURE for webdemo_admin.NON_STD_FEATURE;
create or replace synonym SALES for webdemo_admin.SALES;
create or replace synonym STD_FEATURE for webdemo_admin.STD_FEATURE;
create or replace synonym STD_MODEL for webdemo_admin.STD_MODEL;
create or replace synonym STD_MODEL_FEATURE for webdemo_admin.STD_MODEL_FEATURE;
create or replace synonym SUB_CONTRACTOR for webdemo_admin.SUB_CONTRACTOR;
create or replace synonym WARRANTY_WORK for webdemo_admin.WARRANTY_WORK;
//need the "revoke" line here

Я уверен, что есть более эффективные способы сделать это, я все еще собираюсь с ходу. Как объяснение (для понимания): я хочу, чтобы я поддерживал пользователя с полным контролем над таблицами (и схемой), но мне нужен пользователь (или до 10 пользователей) с перечисленными выше частными синонимами для нескольких соединений иметь тот же тип доступа, что и агент по недвижимости (при просмотре с точки зрения веб-приложения). То есть синонимы позволяют выбирать, вставлять, обновлять и удалять транзакции. Причиной предоставления / отзыва до и после создания синонима является только автоматизация процесса и устранение проблемы безопасности предоставления создания любого синонима обычному пользователю. Кроме того, я не хочу, чтобы синонимы были общедоступными, так как это также является головной болью для отслеживания (и снова проблема безопасности). В любом случае приватность лучше и дает больше контроля.

Опять же, я ценю любые предложения, которые могут быть у каждого.

Ответы [ 2 ]

2 голосов
/ 21 июля 2011

Является ли ключевое слово SQL * Plus PROMPT тем, что вам нужно? Это просто отображает остаток строки:

SQL> DEFINE syn_user = exampleuser1234
SQL> PROMPT GRANT CREATE ANY SYNONYM TO &&syn_user;;
GRANT CREATE ANY SYNONYM TO exampleuser1234;
SQL>

Обратите внимание, что мы должны удвоить точку с запятой, поскольку SQL * Plus интерпретирует первый как конец параметра подстановки syn_user.

1 голос
/ 21 июля 2011

Если вы собираетесь запустить сгенерированный скрипт как владелец синонима, что, как представляется, имеет место, ему не нужно обладать привилегией CREATE ANY SYNONYM, просто привилегией CREATE SYNONYM.Я бы просто предоставил эту привилегию при создании пользователя.

Чтобы сделать грант в этом сценарии, вам нужно сначала подключиться как привилегированный пользователь, такой как SYSTEM.В этом случае вы можете также запустить все это, как SYSTEM, у которого уже есть CREATE ANY SYNONYM.Для этого вам просто нужно изменить операторы создания, включив в него владельца синонима, например, create or replace synonym <syn_user>.STD_MODEL_FEATURE for webdemo_admin.STD_MODEL_FEATURE; (где <syn_user> - значение переменной подстановки &syn_user).

(Чтобы уточнитьэто два разных подхода к этому. Выберите один или другой, а не оба.)

...