Cách tạo người dùng trong Oracle 11g và cấp quyền


80

Ai đó có thể tư vấn cho tôi về cách tạo người dùng trong Oracle 11g và chỉ cấp cho người dùng đó khả năng chỉ thực thi một thủ tục được lưu trữ cụ thể và các bảng trong thủ tục đó không.

Tôi thực sự không chắc chắn làm thế nào để làm điều này!

Câu trả lời:


86

Kết nối dưới dạng HỆ THỐNG.

CREATE USER username IDENTIFIED BY apassword;

GRANT CONNECT TO username;

GRANT EXECUTE on schema.procedure TO username;

Bạn cũng có thể cần:

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

cho bất kỳ bảng nào mà thủ tục sử dụng.


6
+1 Tùy thuộc vào phiên bản Oracle, tuy nhiên, CONNECTvai trò có nhiều đặc quyền hơn so với tên cho thấy. CREATE SESSIONThay vào đó tôi muốn cấp nhiều hơn .
Justin Cave

Phiên bản tôi đang sử dụng là 11g
Andy 5


3
Bạn không cần phải cấp quyền chọn, chèn, cập nhật hoặc xóa trên bất kỳ bảng nào. Một trong những điểm của việc sử dụng các thủ tục là để bạn có thể giữ cho các bảng của mình ở trạng thái "không được bảo đảm" và kiểm soát quyền truy cập vào chúng ở cấp thủ tục.
Dawood ibn Kareem

3
"CẤP THỰC HIỆN trên tên người dùng schema.procedure TO;" được trả lại một lỗi nói rằng "ERROR at line 1: ORA-04.042: thủ tục, chức năng, bao bì, hoặc cơ thể gói không tồn tại"
Tasdik Rahman

25

Làm theo các bước dưới đây để tạo người dùng trong Oracle.
--Kết nối với tư cách người dùng Hệ thống

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

--Tạo truy vấn người dùng

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

- Cung cấp các vai trò

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

--Cung cấp đặc quyền

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

-Cung cấp quyền truy cập vào các bảng.

GRANT SELECT,UPDATE,INSERT ON <TABLE NAME> TO <USER NAME>;

trong Oracle 11g, nó là "cấp dba" hay "grand sysdba"?
jondinham

2
ORA-00990: thiếu hoặc không hợp lệ đặc quyền trên 'CẤP PHIÊN TẠO PHIÊN CẤP BẤT KỲ QUYỀN RIÊNG TƯ NÀO CHO <TÊN NGƯỜI DÙNG>;'
Nicolas Mommaerts

4
dấu phẩy nên có mặt ở đó sau khi phiên
Karthik Prasad

2
Dòng '- Cung cấp đặc quyền' cần thêm dấu phẩy ở đây: CẤP PHIÊN TẠO, CẤP BẤT KỲ QUYỀN RIÊNG TƯ NÀO CHO <TÊN NGƯỜI DÙNG>; Tôi đã chỉnh sửa điều này nhưng đã bị từ chối vì một số lý do.
ghost_1989,


21

Tài liệu Oracle là toàn diện, trực tuyến và miễn phí. Bạn nên học cách sử dụng nó. Bạn có thể tìm thấy cú pháp cho TẠO NGƯỜI DÙNG tại đây và cho GRANT tại đây ,

Để kết nối với cơ sở dữ liệu, chúng tôi cần cấp cho người dùng đặc quyền TẠO PHẦN .

Để cho phép người dùng mới có quyền trên một quy trình đã lưu trữ, chúng tôi cần cấp đặc quyền THỰC HIỆN. Người cấp phải là một trong những người sau:

  • chủ sở hữu thủ tục
  • người dùng được cấp phép thực thi quy trình đó với tùy chọn CÓ QUẢN TRỊ
  • người dùng có đặc quyền CẤP BẤT KỲ ĐỐI TƯỢNG NÀO
  • một DBA hoặc tài khoản siêu người dùng khác.

Lưu ý rằng thông thường chúng ta sẽ không cần cấp quyền cho các đối tượng được sử dụng bởi một thủ tục được lưu trữ để sử dụng thủ tục. Quyền mặc định là chúng tôi thực hiện thủ tục với các quyền giống như chủ sở hữu thủ tục và kế thừa quyền của họ khi thực hiện thủ tục. Điều này được đề cập trong điều khoản AUTHID. Mặc định là định nghĩa (tức là chủ sở hữu thủ tục). Chỉ khi AUTHID được đặt thành CURRENT_USER (người gọi, đó là người dùng mới của chúng tôi) thì chúng tôi mới cần cấp quyền cho các đối tượng được quy trình sử dụng. Tìm hiểu thêm .


10

Không sử dụng phương pháp này trong môi trường quan trọng như TEST và PROD. Các bước dưới đây chỉ được đề xuất cho môi trường cục bộ. Đối với máy chủ cục bộ của tôi, tôi tạo người dùng qua các bước sau:

LƯU Ý QUAN TRỌNG: Tạo người dùng của bạn bằng thông tin đăng nhập người dùng SYSTEM. Nếu không, bạn có thể gặp sự cố khi chạy nhiều ứng dụng trên cùng một cơ sở dữ liệu.

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

Sau đó chạy tập lệnh bên dưới

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

CHỈNH SỬA: Nếu bạn gặp sự cố về oracle ora-28001, mật khẩu đã hết hạn, điều này có thể hữu ích khi chạy

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


4

Như đã đề cập nhiều lần trong các ý kiến, việc sử dụng các CONNECT, RESOURCEDBAvai trò không được khuyến khích bởi Oracle.

Bạn phải kết nối với tư cách SYS để tạo vai trò của bạn và (những) người dùng được giao vai trò này. Bạn có thể sử dụng SQL Developer hoặc SQL * Plus tùy thích. Đừng quên đề cập đến vai trò SYSDBA trong chuỗi đăng nhập. Sử connect_identifierdụng các cú pháp khác nhau.

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

Giả sử bạn có 12cR1 giống như 12cR1 được cung cấp dưới dạng máy ảo với " Ngày nhà phát triển mạng công nghệ Oracle ". Các chuỗi kết nối có thể là (để kết nối với PDB được cung cấp):

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

Lưu ý rằng trong Unix, các dấu ngoặc kép phải được thoát ra nếu không chúng sẽ bị trình bao sử dụng. Do đó "trở thành \".

Sau đó, bạn tạo vai trò MYROLEvà cấp cho nó các vai trò hoặc đặc quyền khác. Tôi đã thêm gần như mức tối thiểu để làm điều gì đó thú vị:

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

Tiếp theo, bạn tạo người dùng MYUSER. Chuỗi theo sau identified bylà mật khẩu có phân biệt chữ hoa chữ thường. Phần còn lại thì không. Bạn cũng có thể sử dụng các số nhận dạng được phân tách bằng SQL (được bao quanh bởi dấu ngoặc kép ") thay vì các số nhận dạng thông thường được chuyển đổi thành chữ hoa và có một số hạn chế. Hạn ngạch có thể là unlimitedthay vì 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;

Cuối cùng, bạn kết nối với tư cách là người dùng mới của mình.

Xin lưu ý rằng bạn cũng có thể thay đổi cấu hình mặc định hoặc cung cấp một cấu hình khác để tùy chỉnh một số cài đặt như thời gian hết hạn của mật khẩu, số lần đăng nhập không thành công được phép, v.v.


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 -permissions-in-oracle /


-1 Đây là một trong những kết quả hàng đầu trên Google, nhưng đó là lời khuyên tồi tệ nhất có thể. Ví dụ này làm cho người dùng trở thành một dba với đầy đủ các đặc quyền. Đây là "Cách từ bỏ quyền kiểm soát cơ sở dữ liệu của bạn"
Devon_C_Miller 14/11/18

0

Bước đầu tiên:

Connect to a database using System/Password;

bước thứ hai:

tạo tên người dùng được xác định bằng mật khẩu; (cú pháp)

Ex: create user manidb idntified by mypass;

Bước thứ ba:

cấp kết nối, tài nguyên cho tên người dùng; (Cú pháp)

Ex: grant connect,resource to manidb;


-2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.