Як створити користувача в Oracle 11g та надати дозволи


80

Хтось може порадити мені, як створити користувача в Oracle 11g і надати цьому користувачеві можливість лише виконувати одну конкретну збережену процедуру та таблиці в цій процедурі.

Я не дуже впевнений, як це зробити!

Відповіді:


86

Підключіться як СИСТЕМА.

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;

до яких таблиць використовується процедура.


6
+1 Однак, залежно від версії Oracle, CONNECTроль має набагато більше привілеїв, ніж випливає з назви. CREATE SESSIONНатомість я волів би надати більше .
Джастін Кейв

Я використовую версію 11g
Andy5


3
Вам не доведеться надавати вибір, вставляти, оновлювати чи видаляти будь-яку з таблиць. Один із пунктів використання процедур полягає в тому, що ви можете тримати таблиці "без привілеїв" і контролювати доступ до них на рівні процедур.
Dawood ibn Kareem

3
"НАДАННЯ ВИКОНАННЯ на schema.procedure НА ім’я користувача;" повертає помилку із повідомленням "ПОМИЛКА в рядку 1: ORA-04042: процедура, функція, пакет або тіло пакета не існує"
Тасдік Рахман

25

Виконайте наведені нижче дії для створення користувача в 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>;

в Oracle 11g це "grant dba" або "grand sysdba"?
jondinham

2
ORA-00990: відсутність або недійсність привілею на "НАДАННЯ СТВОРИТИ СЕСІЮ НАДАННЯ БУДЬ-ЯКИХ ПРИВІЛЕГІЙ <ІМЯ КОРИСТУВАЧА;"
Ніколас Моммаерц,

4
кома повинна бути там після сесії
Картік Прасад

2
Рядок "--Надати привілеї" потребує додавання коми: НАДАННЯ СТВОРИТИ СЕСІЮ, НАДАННЯ БУДЬ-ЯКИХ ПРИВІЛЕГІЙ <ІМЯ КОРИСТУВАЧА; Я відредагував це, але мене чомусь відхилили.
ghost_1989


21

Документація Oracle є повною, доступною в Інтернеті та безкоштовно. Вам слід навчитися ним користуватися. Ви можете знайти синтаксис для CREATE USER тут, а для GRANT тут ,

Для підключення до бази даних нам потрібно надати користувачеві привілей СТВОРИТИ СЕСІЮ .

Щоб дозволити нові права користувача на збережену процедуру, нам потрібно надати привілей EXECUTE. Кондидент повинен бути одним із таких:

  • власник процедури
  • користувачеві надано виконання для цієї процедури з опцією WITH ADMIN
  • користувач із привілеєм GRANT LY OBJECT
  • DBA або інший суперкористувацький обліковий запис.

Зауважте, що нам зазвичай не потрібно надавати права на об’єкти, що використовуються збереженою процедурою, щоб використовувати процедуру. Дозвіл за замовчуванням полягає в тому, що ми виконуємо процедуру з тими ж правами, що і власник процедури, і як би успадковуємо їх права під час виконання процедури. На це поширюється положення AUTHID. За замовчуванням визначено (тобто власник процедури). Тільки якщо для AUTHID встановлено значення CURRENT_USER (закликач, тобто наш новий користувач), нам потрібно надати права на об’єкти, що використовуються процедурою. Дізнайтеся більше .


10

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

ВАЖЛИВА ПРИМІТКА. Створіть свого користувача з обліковими даними користувача SYSTEM. В іншому випадку ви можете зіткнутися з проблемою, коли запускаєте кілька програм в одній базі даних.

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

Потім запустіть скрипт нижче

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 Technology Network ". Рядки підключення можуть бути (для підключення до наданого PDB):

sqlplus sys/oracle@127.0.0.1/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;

Зрештою ви підключаєтесь як новий користувач.

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


2

0
CREATE USER books_admin IDENTIFIED BY MyPassword;
GRANT CONNECT TO books_admin;
GRANT CONNECT, RESOURCE, DBA TO books_admin;
GRANT CREATE SESSION GRANT ANY PRIVILEGE TO books_admin;
GRANT UNLIMITED TABLESPACE TO books_admin;
GRANT SELECT, INSERT, UPDATE, DELETE ON schema.books TO books_admin;

https://docs.oracle.com/cd/B19306_01/network.102/b14266/admusers.htm#i1006107 https://chartio.com/resources/tutorials/how-to-create-a-user-and-grant -дозволи-в-оракулі /


-1 Це один з найкращих результатів у Google, але це найгірший з можливих порад. Цей приклад робить користувача dba з повними привілеями. Це "Як здати контроль над своєю базою даних"
Devon_C_Miller

0

Перший крок:

Connect to a database using System/Password;

другий крок:

створити ім’я користувача, ідентифіковане за паролем; (синтаксис)

Ex: create user manidb idntified by mypass;

третій крок:

надати підключення, ресурс для імені користувача; (Синтаксис)

Ex: grant connect,resource to manidb;


-2
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.