Как создать пользователя c правами SELECT на все таблицы и мог бы создавать других пользователей с этими же правами?
Задача создать пользователя в oracle 11g c правами SELECT во все схемы и таблицы, и дополнительно мог создавать других пользователей c правами SELECT.
CREATE USER user01 IDENTIFIED BY password;
в MySQL работала такая команда:
GRANT select ON *.* TO 'user01'@'%';
В Oracle, как я понял, это не работает, но есть что-то типа:
GRANT SELECT ON <schema name> to <<user>>
и похоже жизненно необходимо каждому пользователю прописать ?
GRANT CONNECT TO username;
Не разобрался, как создать пользователя, который мог бы:
- менять пароль,
- только SELECT все таблицы,
- мог создавать пользователя,
- назначать GRANT SELECT или REVOKE SELECT у пользователей
- не имея административных прав
Ответы (1 шт):
Есть системная привилегия GRANT SELECT ANY TABLE:
Query tables, views, or materialized views in any schema except SYS,AUDSYS. Obtain row locks using a SELECT ... FOR UPDATE.
Чтобы пользователь мог дать привилегию другому пользователю, см. опцию WITH ADMIN OPTION по ссылке выше.
Чтобы пользователь как минимум мог подключится, ему надо дать привилегию CREATE SESSION. CONNECTэто роль, которая больше не рекомендуется к применению.
Итого, попробуйте с пользователем имеющим административные привилегии:
create table t (val varchar2(8))
/
create user user01 identified by pass01
/
grant create session to user01 with admin option
/
grant create user to user01 with admin option
/
grant select any table to user01 with admin option
/
Теперь вновь созданый пользователь может видеть все таблицы и создать себе подобного пользователя:
SQL> conn user01/pass01@host/db-service
Connected.
SQL> select * from db.t
2 /
no rows selected
SQL> create user user02 identified by pass02;
User created.
SQL> grant create session to user02
2 /
Grant succeeded.
SQL> grant select any table to user02
2 /
Grant succeeded.
SQL> conn user02/pass02@host/db-service
Connected.
SQL> show user
USER is "USER02"
SQL> select * from db.t
2 /
no rows selected