Oracle 11g에서 사용자를 생성하고 권한을 부여하는 방법


80

누군가 Oracle 11g에서 사용자를 만드는 방법에 대해 조언하고 해당 사용자에게 특정 저장 프로 시저와 해당 프로 시저의 테이블 만 실행할 수있는 권한 만 부여 할 수 있습니까?

이 작업을 수행하는 방법을 잘 모르겠습니다!

답변:


86

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;

프로 시저가 사용하는 테이블에.


6
+1 그러나 Oracle 버전에 따라 CONNECT역할에는 이름이 제안하는 것보다 더 많은 권한이 있습니다. 나는 오히려 대신 부여하고 싶습니다 CREATE SESSION.
Justin Cave

내가 사용하는 버전은 11g
Andy5입니다.


3
테이블에 대해 선택, 삽입, 업데이트 또는 삭제 권한을 부여 할 필요가 없습니다. 프로 시저 사용의 요점 중 하나는 테이블을 "허용되지 않은"상태로 유지하고 프로 시저 수준에서 테이블에 대한 액세스를 제어 할 수 있다는 것입니다.
Dawood ibn Kareem

3
"schema.procedure TO username;에 GRANT EXECUTE" 라는 오류 반환 "라인 1에 오류 : ORA-04042는 : 프로 시저, 함수, 패키지 또는 패키지 본체가 존재하지 않습니다"
Tasdik 라만

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 2014 년

2
ORA-00990 : 'GRANT CREATE SESSION GRANT ANY PRIVILEGE TO <USER NAME>;'에 대한 권한이 없거나 무효화되었습니다.
Nicolas Mommaerts 2014

4
세션 후에 쉼표가 있어야합니다.
Karthik Prasad

2
'-권한 제공'줄에 쉼표를 추가해야합니다. GRANT CREATE SESSION, GRANT ANY PRIVILEGE TO <USER NAME>; 나는 이것을 편집했지만 어떤 이유로 거부되었습니다.
ghost_1989


21

Oracle 설명서는 포괄적이고 온라인이며 무료입니다. 그것을 사용하는 법을 배워야합니다. 여기 에서 CREATE USER에 대한 구문 과 여기 에서 GRANT에 대한 구문을 찾을 수 있습니다 .

데이터베이스에 연결하려면 사용자 에게 CREATE SESSION 권한 을 부여해야합니다 .

저장 프로 시저에 대한 새 사용자 권한을 허용하려면 EXECUTE 권한을 부여해야합니다. 부여자는 다음 중 하나 여야합니다.

  • 절차 소유자
  • WITH ADMIN 옵션을 사용하여 해당 프로 시저에서 실행 권한이 부여 된 사용자
  • GRANT ANY OBJECT 권한이있는 사용자
  • DBA 또는 기타 슈퍼 유저 계정.

일반적으로 프로 시저를 사용하기 위해 저장 프로 시저에서 사용하는 개체에 대한 권한을 부여 할 필요는 없습니다. 기본 권한은 프로 시저 소유자와 동일한 권한으로 프로 시저를 실행하고 프로 시저 실행시 권한을 상속하는 것입니다. 이것은 AUTHID 절에 의해 다루어집니다. 기본값은 정의 자 (예 : 프로 시저 소유자)입니다. AUTHID가 CURRENT_USER (호출자, 즉 새 사용자)로 설정된 경우에만 프로 시저에서 사용하는 개체에 대한 권한을 부여해야합니다. 자세히 알아보십시오 .


10

TEST 및 PROD와 같은 중요한 환경에서는 이러한 접근 방식을 사용하지 마십시오. 아래 단계는 로컬 환경을 위해 제안됩니다. 내 로컬 호스트의 경우 다음 단계를 통해 사용자를 만듭니다.

중요 참고 : 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

이전에 주석에서 여러 번 언급했듯이 Oracle은 CONNECT, RESOURCEDBA역할 의 사용을 권장하지 않습니다.

역할과이 역할이 부여 된 사용자를 생성하려면 SYS로 연결해야합니다. 원하는대로 SQL Developer 또는 SQL * Plus를 사용할 수 있습니다. 로그온 문자열에서 SYSDBA 역할을 언급하는 것을 잊지 마십시오. 는 connect_identifier다른 구문을 사용합니다.

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

" Oracle Technology Network Developer Day " 에서 VM으로 제공된 것과 같은 12cR1이 있다고 가정 해 보겠습니다 . 연결 문자열은 (제공된 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비밀번호 문자열 은 대소 문자를 구분합니다. 나머지는 그렇지 않습니다. "tu 대문자로 변환되고 몇 가지 제한 사항이 적용되는 일반 식별자 대신 SQL 구분 식별자 (따옴표로 묶음 )를 사용할 수도 있습니다 . 할당량 unlimited20m.

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

결국 새로운 사용자로 연결됩니다.

기본 프로필을 변경하거나 다른 프로필을 제공하여 암호 만료 기간, 허용 된 로그인 시도 횟수 등의 일부 설정을 사용자 지정할 수도 있습니다.



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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.