Как создать пользователя в Oracle 11g и предоставить разрешения

75

Может ли кто-нибудь посоветовать мне о том, как создать пользователя в Oracle 11g, и предоставить этому пользователю только возможность выполнить одну конкретную хранимую процедуру и таблицы в этой процедуре.

Я не уверен, как это сделать!

Теги:
oracle11g
access-control

7 ответов

76

Подключиться как SYSTEM.

CREATE USER username IDENTIFIED BY apassword;

GRANT CONNECT TO username;

GRANT EXECUTE on schema.procedure TO username;

Вам также может потребоваться:

GRANT SELECT [, INSERT] [, UPDATE] [, DELETE] on schema.table TO username;

в зависимости от того, какие таблицы использует эта процедура.

Показать ещё 3 комментария
22

Следуйте приведенным ниже инструкциям для создания пользователя в Oracle.
--Сообщение как пользователь системы

CONNECT <USER-NAME>/<PASSWORD>@<DATABASE NAME>;

- Создать пользовательский запрос

CREATE USER <USER NAME> IDENTIFIED BY <PASSWORD>;

- Предоставление ролей

GRANT CONNECT,RESOURCE,DBA TO <USER NAME>;

- Предоставить привилегии

GRANT CREATE SESSION GRANT ANY PRIVILEGE TO <USER NAME>;
GRANT UNLIMITED TABLESPACE TO <USER NAME>;

- Обеспечить доступ к таблицам.

GRANT SELECT,UPDATE,INSERT ON <TABLE NAME> TO <USER NAME>;
Показать ещё 4 комментария
21

Документация Oracle является всеобъемлющей, онлайн и бесплатной. Вы должны научиться его использовать. Здесь вы можете найти синтаксис CREATE USER здесь и GRANT здесь,

Чтобы подключиться к базе данных, нам необходимо предоставить пользователю привилегию CREATE SESSION.

Чтобы разрешить новые права пользователя в хранимой процедуре, нам необходимо предоставить привилегию EXECUTE. Лицо, предоставляющее право, должно быть одним из следующих:

  • владелец процедуры
  • пользователь предоставил выполнение этой процедуры с опцией WITH ADMIN
  • пользователь с привилегией GRANT ANY OBJECT
  • DBA или другая учетная запись суперпользователя.

Обратите внимание, что обычно нам не нужно предоставлять права на объекты, используемые хранимой процедурой, чтобы использовать эту процедуру. Разрешение по умолчанию заключается в том, что мы выполняем процедуру с теми же правами, что и владелец процедуры, и как бы наследуем их права при выполнении процедуры. Это рассматривается в предложении AUTHID. По умолчанию используется определитель (т.е. Владелец процедуры). Только если для параметра AUTHID установлено значение CURRENT_USER (invoker, это наш новый пользователь), нам нужно предоставить права на объекты, используемые процедурой. Узнайте больше.

8

Не используйте этот подход в критической среде, такой как TEST и PROD. Ниже приведены только шаги для локальной среды. Для моего локального хоста я создаю пользователя с помощью следующих шагов:

ВАЖНОЕ ПРИМЕЧАНИЕ: Создайте пользователя с учетными данными пользователя SYSTEM. В противном случае вы можете столкнуться с проблемой при запуске нескольких приложений в одной базе данных.

 CONNECT SYSTEM/<<System_User_Password>>@<<DatabaseName>>; -- connect db with username and password, ignore if you already connected to database.

Затем выполните ниже script

CREATE USER <<username>> IDENTIFIED BY <<password>>; -- create user with password
GRANT CONNECT,RESOURCE,DBA TO <<username>>; -- grant DBA,Connect and Resource permission to this user(not sure this is necessary if you give admin option)
GRANT CREATE SESSION TO <<username>> WITH ADMIN OPTION; --Give admin option to user
GRANT UNLIMITED TABLESPACE TO <<username>>; -- give unlimited tablespace grant

РЕДАКТИРОВАТЬ: Если у вас возникла проблема с oracle ora-28001, срок действия пароля истек, это может быть полезно запустить

select * from dba_profiles;-- check PASSWORD_LIFE_TIME 
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; -- SET IT TO UNLIMITED
4

Как уже упоминалось несколько раз в комментариях, использование ролей CONNECT, RESOURCE и DBA не рекомендуется Oracle.

Вам необходимо подключиться как SYS для создания вашей роли и пользователя (пользователей), которому дана эта роль. Вы можете использовать SQL Developer или SQL * Plus по своему усмотрению. Не забудьте указать роль SYSDBA в строке входа. connect_identifier использует разные синтаксисы.

sqlplus sys/<<password>>@<<connect_identifier>> as sysdba

Скажем, у вас есть 12cR1, как тот, который предоставляется в качестве виртуальной машины, с День разработчиков технологии технологий Oracle". Строки подключения могут быть (для подключения к предоставленному PDB):

sqlplus sys/[email protected]/orcl as sysdba
sqlplus sys@"127.0.0.1/orcl" as sysdba -- to avoid putting the pw in clear

Обратите внимание, что в Unix кавычки должны быть экранированы, иначе они будут использоваться оболочкой. Таким образом, " становится \".

Затем вы создаете роль MYROLE и предоставляете ей другие роли или привилегии. Я добавил почти минимальный минимум, чтобы сделать что-то интересное:

create role myrole not identified;
grant create session to myrole;
grant alter session to myrole;
grant create table to myrole;

Затем создайте пользователя MYUSER. Строка, следующая за identified by, которая является паролем, чувствительна к регистру. Остальное - нет. Вы также можете использовать идентификаторы с разделителями SQL (в окружении кавычек ") вместо обычных идентификаторов, которые преобразуются в верхний регистр и подчиняются нескольким ограничениям. Квота может быть unlimited вместо 20m.

create user myuser identified by myuser default tablespace users profile default account unlock;
alter user myuser quota 20m on users;
grant myrole to myuser;

В конце концов, вы подключаетесь как новый пользователь.

Обратите внимание, что вы также можете изменить профиль по умолчанию или предоставить другой вариант для настройки некоторых параметров в качестве срока действия паролей, количества разрешенных неудачных попыток входа в систему и т.д.

-5
  • шаг 1.

    create user raju identified by deshmukh;

  • Шаг 2.

    grant connect , resource to raju;

  • Шаг 3.

    grant unlimitted tablespace to raju;

  • step4.

    grant select , update , insert , alter to raju;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню