I will demonstrate the procedure with examples to make a read only user for a schema. In the example I will make devels user which will have read only permission on prod schema.
Let's start by creating PROD user.
SQL> CREATE USER PROD IDENTIFIED BY P;
User created.
SQL> GRANT DBA TO PROD;
Grant succeeded.
SQL> CONN PROD/P;
Connected.
SQL> CREATE TABLE PROD_TAB1 ( A NUMBER PRIMARY KEY, B NUMBER);
Table created.
SQL> INSERT INTO PROD_TAB1 VALUES(1,2);
1 row created.
SQL> CREATE TABLE PROD_TAB2(DATE_COL DATE);
Table created.
SQL> CREATE OR REPLACE TRIGGER PROD_TAB2_T AFTER INSERT ON PROD_TAB1
BEGIN
INSERT INTO PROD_TAB2 VALUES(SYSDATE);
END;
/
Trigger created.
SQL>CREATE VIEW A AS SELECT * FROM PROD_TAB2;
View created.
Method 1: Granting Privilege Manually
Step 1: Create devels user
SQL> CREATE USER DEVELS IDENTIFIED BY D;
User created.
Step 2: Grant only select session and create synonym privilege to devels user.
SQL> GRANT CREATE SESSION ,CREATE SYNONYM TO DEVELS;
Grant succeeded.
Step 3:Make script to grant select privilege.
$vi /oradata2/script.sql
SET PAGESIZE 0
SET LINESIZE 200
SET HEADING OFF
SET FEEDBACK OFF
SET ECHO OFF
SPOOL /oradata2/select_only_to_prod.sql
@@/oradata2/select_only_script.sql
SPOOL OFF
This script will run the /oradata2/select_only_script.sql and generate a output script /oradata2/select_only_to_prod.sql which need to be run in fact.
Step 4:
Prepare the /oradata2/select_only_script.sql script which will work as input for /oradata2/script.sql file.
$vi /oradata2/select_only_script.sql
SELECT 'GRANT SELECT ON PROD.' ||TABLE_NAME || ' TO DEVELS;' FROM DBA_TABLES WHERE OWNER='PROD';
SELECT 'GRANT SELECT ON PROD.' ||VIEW_NAME || ' TO DEVELS;' FROM DBA_VIEWS WHERE OWNER='PROD';
Step 5:
Now execute the /oradata2/script.sql which will in fact generate scipt /oradata2/select_only_to_prod.sql.
SQL> @/oradata2/script.sql
GRANT SELECT ON PROD.PROD_TAB1 TO DEVELS;
GRANT SELECT ON PROD.PROD_TAB2 TO DEVELS;
Step 6:
Execute the output script select_only_to_prod.sql which will be used to grant read only permission of devels user to prod schema.
SQL> @/oradata2/select_only_to_prod.sql
Step 7:
Log on devels user and create synonym so that the devels user can access prod's table without any dot(.). Like to access prod_tab2 of prod schema he need to write prod.prod_tab2. But after creating synonym he simply can use prod_tab2 to access devels table and views.
To create synonym do the following,
SQL>CONN DEVELS/D;
SQL>host vi /oradata2/script_synonym.sql
SET PAGESIZE 0
SET LINESIZE 200
SET HEADING OFF
SET FEEDBACK OFF
SET ECHO OFF
SPOOL /oradata2/synonym_to_prod.sql
@@/oradata2/synonym_script.sql
SPOOL OFF
SQL>host vi /oradata2/synonym_script.sql
SELECT 'CREATE SYNONYM ' ||TABLE_NAME|| ' FOR PROD.' ||TABLE_NAME||';' FROM ALL_TABLES WHERE OWNER='PROD';
SELECT 'CREATE SYNONYM ' ||VIEW_NAME|| ' FOR PROD.' ||VIEW_NAME||';' FROM ALL_VIEWS WHERE OWNER='PROD';
SQL>@/oradata2/script_synonym.sql
SQL>@/oradata2/synonym_to_prod.sql
Step 8: At this stage you have completed your job. Log on as devels schema and see,
SQL> select * from prod_tab1;
1 2
SQL> show user
USER is "DEVELS"
Only select privilege is there. So DML will throw error. Like,
SQL> insert into prod_tab1 values(4,3);
insert into prod_tab1 values(4,3)
*
ERROR at line 1:
ORA-01031: insufficient privileges
Method 2: Writing PL/SQL Code
This is script for table :
set serveroutput on
DECLARE
sql_txt VARCHAR2(300);
CURSOR tables_cur IS
SELECT table_name FROM dba_tables where owner='PROD';
BEGIN
dbms_output.enable(10000000);
FOR tables IN tables_cur LOOP
sql_txt:='GRANT SELECT ON PROD.'||tables.table_name||' TO devels';
execute immediate sql_txt;
END LOOP;
END;
/
This is the script for grant select permission for views.
DECLARE
sql_txt VARCHAR2(300);
CURSOR tables_cur IS
SELECT view_name FROM dba_views where owner='PROD';
BEGIN dbms_output.enable(10000000);
FOR tables IN tables_cur LOOP
sql_txt:='GRANT SELECT ON PROD.'||tables.view_name||' TO devels';
--dbms_output.put_line(sql_txt);
execute immediate sql_txt;
END LOOP;
END;
/
To create synonym on prod schema,
Log on as devels and execute the following procedure.
SQL>CONN DEVELS/D
SQL>
DECLARE
sql_txt VARCHAR2(300);
CURSOR syn_cur IS
SELECT table_name name FROM all_tables where owner='PROD'
UNION SELECT VIEW_NAME name from all_views where owner='PROD' ;
BEGIN dbms_output.enable(10000000);
FOR syn IN syn_cur LOOP
sql_txt:='CREATE SYNONYM '||syn.name|| ' FOR PROD.'||syn.name ;
dbms_output.put_line(sql_txt);
execute immediate sql_txt;
END LOOP;
END;
/
Method 3: Writing a Trigger
After granting select permission in either of two ways above you can avoid creating synonym by simply creating a trigger.
Create a log on trigger that eventually set current_schema to prod just after log in DEVELS user.
create or replace trigger log_on_after_devels
after logon ON DEVELS.SCHEMA
BEGIN
EXECUTE IMMEDIATE 'alter session set CURRENT_SCHEMA = prod';
END;
/
Really nice site. Hope to visit it again soon
RépondreSupprimerВы продаете свой сайт?
RépondreSupprimerПривет, статья хорошая ,но что то с отображением шаблона твоего блога.
RépondreSupprimerВ Опере проверь свой шаблон!
Very interesting blog. I will come regularly here. Thanks the author
RépondreSupprimerКак раз то, что нужно. Я знаю, что вместе мы сможем прийти к правильному ответу.
RépondreSupprimerИ как в таком случае нужно поступать?
RépondreSupprimerI very much liked the given material. I will come here often
RépondreSupprimerits really great blog. Thx for the auther
RépondreSupprimerIn my opinion you are mistaken. I suggest it to discuss. Write to me in PM.
RépondreSupprimerIn my opinion you are not right. I can defend the position.
It is remarkable, very amusing idea
I consider, that you are not right. Write to me in PM.
It is remarkable, it is rather valuable answer
I very much like this blog. Yet time I will come here
RépondreSupprimerThe author has very much tried. I support the majority of commentators
RépondreSupprimerWaw its really nice blog. Hope I can visit this again
RépondreSupprimerHello. All of us could discuss together this theme in more details!?
RépondreSupprimerThe best blog which I saw before. There are many usefull information for me
RépondreSupprimerМожно разместить вашу статью на своем сайте?
RépondreSupprimerThere’s a wealth of information here. Thanks! I’ll be back for more.
RépondreSupprimergood post
RépondreSupprimercool posting
RépondreSupprimerThe best blog which I saw before. Hope to vissit it again
RépondreSupprimerVery interestin, why u thik so? Is`t matter? Huh
RépondreSupprimergood post, thank you!
RépondreSupprimerWhere does funding for UFT merit bonuses come from?
RépondreSupprimerI fully agree with all the positive feedback on the blog, although there is little negative.
RépondreSupprimereee, respect! cool post!
RépondreSupprimerВсех пользователей женского рода поздравляю с 8 марта.
RépondreSupprimerМне понравилось, обязательно добавлю в закладки и буду пользоваться.
RépondreSupprimeryahoo good post !
RépondreSupprimerВсе понравилось, присутствуют обновления, комменты еще бы почистить.
RépondreSupprimerThank you, I regularly read your blog, I have some questions for you, let me know if you want to contact me by e-mail
RépondreSupprimerИнтересно, подобного мало где найдёшь.
RépondreSupprimercan i translate in Russian and post on my blog? )
RépondreSupprimerПочему нигде, было бы желание и все найдешь.
RépondreSupprimerOk, feel free to do it
RépondreSupprimerНашел много интересного в этом блоге, очень доволен.
RépondreSupprimerСогласен, что можно найти без проблем такую информацию.
RépondreSupprimerБлог просто гуд, побольше бы таких в инете.
RépondreSupprimerнеплохой ресурс, все полностью устроило. буду пользоваться дальше.
RépondreSupprimerI now, this is a great article.A successful blog needs unique, useful content that interests the readers
RépondreSupprimerХороший блог, также все понравилось как и многим другим отписавшимся.
RépondreSupprimerНе против, действительно хорошо сделано.
RépondreSupprimerGoodmorning
RépondreSupprimerawesome post - i'm creating video about it and i will post it to youtube !
if you wana to help or just need a link send me email !
Такие вопросы можно здесь и не обсуждать, между собой общайтесь.
RépondreSupprimerОтлично сделали, есть чему поучиться.
RépondreSupprimerОтличный блог, буду и дальше пользоваться им.
RépondreSupprimerнеплохой ресурс подсказали, очень доволен. спс.
RépondreSupprimerОтлично сделали блог, есть чему начинающим поучиться. Молодцы.
RépondreSupprimerМеня все полностью устраивает, поэтому и молчу.
RépondreSupprimerАвтор, выражаю тебе респект за качественный блог! Наконец-то встретил сайт, который похож на СДЛ. Здесь приятно находиться, будет время еще почитаю другие темы!
RépondreSupprimerВсе бы ничего, только комментов много почистить надо.
RépondreSupprimerА ак часто обновления происходят скажите.
RépondreSupprimerclass action suits agianst avandia lawyers
RépondreSupprimerтематика блога понравилась, буду пользоваться и дальше.
RépondreSupprimerОтлично сделали, и тематика подходящая. Автору респект.
RépondreSupprimerА автомобильный по тематике блог никто не подскажет.
RépondreSupprimerУ меня у самого есть несколько блогов и поэтому точно скажу, этот блог сделан для людей.
RépondreSupprimerДа в общем так оно и есть, в этом плане я с Вами соглашусь.
RépondreSupprimerВсе отлично работает, не знаю чего у тебя не грузится.
RépondreSupprimerМне как журналисту понравилось наполнение, побольше бы таких.
RépondreSupprimerМожно и так, но я бы лучше подождал немного.
RépondreSupprimerинтересно продумали все, есть чему позавидовать даже.
RépondreSupprimerА может мне кто подскажет хороший ресурс по малой авиации, заранее спс.
RépondreSupprimerПользовался ранее и буду пользоваться дальше.
RépondreSupprimerМожно и так, главное чтобы результат был хороший, а в остальном походу процесса разберемся.
RépondreSupprimerUsed earlier and more I will blog for people to do.
RépondreSupprimerсериал интерны онлайн
RépondreSupprimerСупер сайт спасибо!
RépondreSupprimerА может будите писать это в другом месте, надоело уже.
RépondreSupprimerBlog liked, but a lot of unnecessary comments.
RépondreSupprimerКоторый раз уже убеждаюсь в том, что много клонов тут.
RépondreSupprimerДа, не ожидал что увижу сдесь столько интересного в комментах.
RépondreSupprimerДа уже частенько такое можно встретить, так что не удивляйся.
RépondreSupprimerInterestingly, and advertising posts are removed or you can write.
RépondreSupprimerНеплохое решение, только зачем столько рекламы.
RépondreSupprimerхороший блог, лично мне понравился
RépondreSupprimerКто нибудь из пользователей занимается недвижимостью еще?
RépondreSupprimerЕсли кому интересны музыка, игры и новинки кино, могу безвозмездно помоч.
RépondreSupprimerМне понравился, не плохой блог.
RépondreSupprimerДа по чему бы и нет??!! просто стараться надо иногда.
RépondreSupprimerДобавляй, я уже давно так сделал и не жалею.
RépondreSupprimerМожет и подойдет, нало проверить.
RépondreSupprimerМне так же все подходит, хотя было и получше.
RépondreSupprimerЕсли кому интересна информация по лучевой терапии, обращайтесь.
RépondreSupprimerСогласен с автором по поводу информации.
RépondreSupprimerhttp://feeds.feedburner.com/blogspot/BVPZ
RépondreSupprimerThis theme is simply matchless :), it is very interesting to me)))
RépondreSupprimerWhat charming message
Yes, really. And I have faced it. We can communicate on this theme.
You are not right. I suggest it to discuss. Write to me in PM, we will talk.
I think, that you are mistaken. I can prove it. Write to me in PM, we will talk.
-
Тоже думаю добавить в закладки, интересный блог.
RépondreSupprimerНашёл, то что искал! Отдельное спасибо за сборники! Нет слов!
RépondreSupprimerСпасибо за материал..
RépondreSupprimerI fully agree with the author.
RépondreSupprimerСупер сайт спасибо!
RépondreSupprimerПоддерживаю автора, все правильно.
RépondreSupprimerхороший блог, мне нравятся боевые исскуства!!!
RépondreSupprimerСупер сайт спасибо!
RépondreSupprimerМожно и так сказать, но факт есть факт.
RépondreSupprimerАвтор все правильно сделал, поддерживаю его.
RépondreSupprimerНе плохая информация о видах зароботка в интернете и правильном выборе направления.
RépondreSupprimerТоже верно, хотя многие бы не согласились.
RépondreSupprimerЛучше бы сделал, как все говорят. Иногда надо прислушиваться к людям.
RépondreSupprimerПонравилось, добавлю в закладки.
RépondreSupprimerИнтересно очень
RépondreSupprimerСегодня чтото страницы хреново грузятся везде.
RépondreSupprimerнеплохо придумано, молодцы.
RépondreSupprimerСогласен с автором, так и надо делать.
RépondreSupprimerТоже так думаю, лучше проверять сразу.
RépondreSupprimerДа, лучше бы Вы писали по человечески.
RépondreSupprimerПонравилось конечно, буду пользоваться и дальше.
RépondreSupprimerтут интересно, но надо и поспать.
RépondreSupprimerКлассная статья. А вы знали что форумы могут быть настроены различным образом.
RépondreSupprimerОтдельное спасибо за это, очень приятно.
RépondreSupprimerЗачем писать такое, можно и подумать иногда.
RépondreSupprimerНе часто такое можно увидеть, удивлен.
RépondreSupprimerWe made good, I'll use it.
RépondreSupprimerИнтересно очень
RépondreSupprimerEverything is written correctly, and rightly so.
RépondreSupprimerAlso agree with the author, all true.
RépondreSupprimerПравильно написал, только для чего.
RépondreSupprimerКаспер не пускает, ели зашел.
RépondreSupprimerПриятно работать на таких ресурсах.
RépondreSupprimerготово, спасибо.
RépondreSupprimerХороший ресурс, добавлю в закладки.
RépondreSupprimerПопал случайно, но доволен.
RépondreSupprimerКлассный у вас у блога дизайн
RépondreSupprimerКонечно правильно думаешь, хотя можно и по другому.
RépondreSupprimerВсё выше сказанное правда. Присоединяюсью.
RépondreSupprimerIn it something is. Now all is clear, I thank for the information.
RépondreSupprimerIt is remarkable, very useful phrase
Your opinion is useful
You have quickly thought up such matchless answer?
I consider, that you commit an error. Write to me in PM, we will talk.