mardi 12 janvier 2010

Create Read only user for a Schema

One thing you need to remember before read this post is there is no easy or shortcut way to make a read only user of another schema. Like grant select on username to another_username- there is no such single command like this. However you may have several alternatives to make read only user for a schema.

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;
/

125 commentaires:

  1. Really nice site. Hope to visit it again soon

    RépondreSupprimer
  2. Вы продаете свой сайт?

    RépondreSupprimer
  3. Привет, статья хорошая ,но что то с отображением шаблона твоего блога.
    В Опере проверь свой шаблон!

    RépondreSupprimer
  4. Very interesting blog. I will come regularly here. Thanks the author

    RépondreSupprimer
  5. Как раз то, что нужно. Я знаю, что вместе мы сможем прийти к правильному ответу.

    RépondreSupprimer
  6. И как в таком случае нужно поступать?

    RépondreSupprimer
  7. I very much liked the given material. I will come here often

    RépondreSupprimer
  8. its really great blog. Thx for the auther

    RépondreSupprimer
  9. In my opinion you are mistaken. I suggest it to discuss. Write to me in PM.
    In 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

    RépondreSupprimer
  10. I very much like this blog. Yet time I will come here

    RépondreSupprimer
  11. The author has very much tried. I support the majority of commentators

    RépondreSupprimer
  12. Waw its really nice blog. Hope I can visit this again

    RépondreSupprimer
  13. Hello. All of us could discuss together this theme in more details!?

    RépondreSupprimer
  14. The best blog which I saw before. There are many usefull information for me

    RépondreSupprimer
  15. Можно разместить вашу статью на своем сайте?

    RépondreSupprimer
  16. There’s a wealth of information here. Thanks! I’ll be back for more.

    RépondreSupprimer
  17. roomofrequirement2 mars 2010 à 03:44

    The best blog which I saw before. Hope to vissit it again

    RépondreSupprimer
  18. room-of-requirement2 mars 2010 à 07:11

    Very interestin, why u thik so? Is`t matter? Huh

    RépondreSupprimer
  19. good post, thank you!

    RépondreSupprimer
  20. Affiliate Network6 mars 2010 à 10:31

    Where does funding for UFT merit bonuses come from?

    RépondreSupprimer
  21. I fully agree with all the positive feedback on the blog, although there is little negative.

    RépondreSupprimer
  22. eee, respect! cool post!

    RépondreSupprimer
  23. Slava.Fitukopewich9 mars 2010 à 17:48

    Всех пользователей женского рода поздравляю с 8 марта.

    RépondreSupprimer
  24. Artem.Fabkifin10 mars 2010 à 11:58

    Мне понравилось, обязательно добавлю в закладки и буду пользоваться.

    RépondreSupprimer
  25. yahoo good post !

    RépondreSupprimer
  26. Все понравилось, присутствуют обновления, комменты еще бы почистить.

    RépondreSupprimer
  27. Thank 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
  28. Fedor.Swertifen11 mars 2010 à 11:24

    Интересно, подобного мало где найдёшь.

    RépondreSupprimer
  29. Нью Йорк11 mars 2010 à 16:43

    can i translate in Russian and post on my blog? )

    RépondreSupprimer
  30. Почему нигде, было бы желание и все найдешь.

    RépondreSupprimer
  31. Ok, feel free to do it

    RépondreSupprimer
  32. Нашел много интересного в этом блоге, очень доволен.

    RépondreSupprimer
  33. Согласен, что можно найти без проблем такую информацию.

    RépondreSupprimer
  34. Georgiy.Fekolatov12 mars 2010 à 20:21

    Блог просто гуд, побольше бы таких в инете.

    RépondreSupprimer
  35. неплохой ресурс, все полностью устроило. буду пользоваться дальше.

    RépondreSupprimer
  36. download free adobe photoshop cs413 mars 2010 à 09:30

    I now, this is a great article.A successful blog needs unique, useful content that interests the readers

    RépondreSupprimer
  37. Хороший блог, также все понравилось как и многим другим отписавшимся.

    RépondreSupprimer
  38. Не против, действительно хорошо сделано.

    RépondreSupprimer
  39. Download Movies13 mars 2010 à 19:19

    Goodmorning
    awesome 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
  40. Mihsa.Fitrewovich14 mars 2010 à 15:03

    Такие вопросы можно здесь и не обсуждать, между собой общайтесь.

    RépondreSupprimer
  41. Отлично сделали, есть чему поучиться.

    RépondreSupprimer
  42. Отличный блог, буду и дальше пользоваться им.

    RépondreSupprimer
  43. неплохой ресурс подсказали, очень доволен. спс.

    RépondreSupprimer
  44. Отлично сделали блог, есть чему начинающим поучиться. Молодцы.

    RépondreSupprimer
  45. Vadim.Gukoilov20 mars 2010 à 03:38

    Меня все полностью устраивает, поэтому и молчу.

    RépondreSupprimer
  46. Автор, выражаю тебе респект за качественный блог! Наконец-то встретил сайт, который похож на СДЛ. Здесь приятно находиться, будет время еще почитаю другие темы!

    RépondreSupprimer
  47. Все бы ничего, только комментов много почистить надо.

    RépondreSupprimer
  48. А ак часто обновления происходят скажите.

    RépondreSupprimer
  49. effexor xr and testimonials22 mars 2010 à 17:58

    class action suits agianst avandia lawyers

    RépondreSupprimer
  50. тематика блога понравилась, буду пользоваться и дальше.

    RépondreSupprimer
  51. Отлично сделали, и тематика подходящая. Автору респект.

    RépondreSupprimer
  52. А автомобильный по тематике блог никто не подскажет.

    RépondreSupprimer
  53. У меня у самого есть несколько блогов и поэтому точно скажу, этот блог сделан для людей.

    RépondreSupprimer
  54. Да в общем так оно и есть, в этом плане я с Вами соглашусь.

    RépondreSupprimer
  55. Все отлично работает, не знаю чего у тебя не грузится.

    RépondreSupprimer
  56. Мне как журналисту понравилось наполнение, побольше бы таких.

    RépondreSupprimer
  57. Можно и так, но я бы лучше подождал немного.

    RépondreSupprimer
  58. интересно продумали все, есть чему позавидовать даже.

    RépondreSupprimer
  59. А может мне кто подскажет хороший ресурс по малой авиации, заранее спс.

    RépondreSupprimer
  60. Пользовался ранее и буду пользоваться дальше.

    RépondreSupprimer
  61. Можно и так, главное чтобы результат был хороший, а в остальном походу процесса разберемся.

    RépondreSupprimer
  62. Used earlier and more I will blog for people to do.

    RépondreSupprimer
  63. смотреть онлайн сериал интерны28 mars 2010 à 07:00

    сериал интерны онлайн

    RépondreSupprimer
  64. Супер сайт спасибо!

    RépondreSupprimer
  65. А может будите писать это в другом месте, надоело уже.

    RépondreSupprimer
  66. Blog liked, but a lot of unnecessary comments.

    RépondreSupprimer
  67. Который раз уже убеждаюсь в том, что много клонов тут.

    RépondreSupprimer
  68. Да, не ожидал что увижу сдесь столько интересного в комментах.

    RépondreSupprimer
  69. Да уже частенько такое можно встретить, так что не удивляйся.

    RépondreSupprimer
  70. Interestingly, and advertising posts are removed or you can write.

    RépondreSupprimer
  71. Неплохое решение, только зачем столько рекламы.

    RépondreSupprimer
  72. хороший блог, лично мне понравился

    RépondreSupprimer
  73. Кто нибудь из пользователей занимается недвижимостью еще?

    RépondreSupprimer
  74. Если кому интересны музыка, игры и новинки кино, могу безвозмездно помоч.

    RépondreSupprimer
  75. Мне понравился, не плохой блог.

    RépondreSupprimer
  76. Да по чему бы и нет??!! просто стараться надо иногда.

    RépondreSupprimer
  77. Добавляй, я уже давно так сделал и не жалею.

    RépondreSupprimer
  78. Может и подойдет, нало проверить.

    RépondreSupprimer
  79. Мне так же все подходит, хотя было и получше.

    RépondreSupprimer
  80. Если кому интересна информация по лучевой терапии, обращайтесь.

    RépondreSupprimer
  81. Согласен с автором по поводу информации.

    RépondreSupprimer
  82. http://feeds.feedburner.com/blogspot/BVPZ

    RépondreSupprimer
  83. This theme is simply matchless :), it is very interesting to me)))
    What 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
  84. Тоже думаю добавить в закладки, интересный блог.

    RépondreSupprimer
  85. Нашёл, то что искал! Отдельное спасибо за сборники! Нет слов!

    RépondreSupprimer
  86. Спасибо за материал..

    RépondreSupprimer
  87. I fully agree with the author.

    RépondreSupprimer
  88. форум посёлка4 avril 2010 à 18:21

    Супер сайт спасибо!

    RépondreSupprimer
  89. Поддерживаю автора, все правильно.

    RépondreSupprimer
  90. хороший блог, мне нравятся боевые исскуства!!!

    RépondreSupprimer
  91. похудение5 avril 2010 à 17:44

    Супер сайт спасибо!

    RépondreSupprimer
  92. Gricha.Fityjorevoder5 avril 2010 à 22:33

    Можно и так сказать, но факт есть факт.

    RépondreSupprimer
  93. Автор все правильно сделал, поддерживаю его.

    RépondreSupprimer
  94. Не плохая информация о видах зароботка в интернете и правильном выборе направления.

    RépondreSupprimer
  95. Тоже верно, хотя многие бы не согласились.

    RépondreSupprimer
  96. Лучше бы сделал, как все говорят. Иногда надо прислушиваться к людям.

    RépondreSupprimer
  97. Понравилось, добавлю в закладки.

    RépondreSupprimer
  98. divx онлайн7 avril 2010 à 16:21

    Интересно очень

    RépondreSupprimer
  99. Сегодня чтото страницы хреново грузятся везде.

    RépondreSupprimer
  100. неплохо придумано, молодцы.

    RépondreSupprimer
  101. Согласен с автором, так и надо делать.

    RépondreSupprimer
  102. Тоже так думаю, лучше проверять сразу.

    RépondreSupprimer
  103. Да, лучше бы Вы писали по человечески.

    RépondreSupprimer
  104. Понравилось конечно, буду пользоваться и дальше.

    RépondreSupprimer
  105. тут интересно, но надо и поспать.

    RépondreSupprimer
  106. Классная статья. А вы знали что форумы могут быть настроены различным образом.

    RépondreSupprimer
  107. Отдельное спасибо за это, очень приятно.

    RépondreSupprimer
  108. Зачем писать такое, можно и подумать иногда.

    RépondreSupprimer
  109. Не часто такое можно увидеть, удивлен.

    RépondreSupprimer
  110. We made good, I'll use it.

    RépondreSupprimer
  111. Интересно очень

    RépondreSupprimer
  112. Everything is written correctly, and rightly so.

    RépondreSupprimer
  113. Also agree with the author, all true.

    RépondreSupprimer
  114. Правильно написал, только для чего.

    RépondreSupprimer
  115. Каспер не пускает, ели зашел.

    RépondreSupprimer
  116. Приятно работать на таких ресурсах.

    RépondreSupprimer
  117. готово, спасибо.

    RépondreSupprimer
  118. Хороший ресурс, добавлю в закладки.

    RépondreSupprimer
  119. Попал случайно, но доволен.

    RépondreSupprimer
  120. воздушные фильтра18 avril 2010 à 07:47

    Классный у вас у блога дизайн

    RépondreSupprimer
  121. Конечно правильно думаешь, хотя можно и по другому.

    RépondreSupprimer
  122. Всё выше сказанное правда. Присоединяюсью.

    RépondreSupprimer
  123. In it something is. Now all is clear, I thank for the information.
    It 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.

    RépondreSupprimer