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:
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.
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>;
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:
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 .
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
Như đã đề cập nhiều lần trong các ý kiến, việc sử dụng các CONNECT
, RESOURCE
và DBA
vai 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_identifier
dụ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ò MYROLE
và 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 by
là 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à unlimited
thay 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.
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 /
bước 1 .
create user raju identified by deshmukh;
bước 2.
grant connect , resource to raju;
bước 3.
grant unlimitted tablespace to raju;
bước 4.
grant select , update , insert , alter to raju;
CONNECT
vai trò có nhiều đặc quyền hơn so với tên cho thấy.CREATE SESSION
Thay vào đó tôi muốn cấp nhiều hơn .