Sự khác biệt giữa người dùng và lược đồ trong Oracle là gì?
Sự khác biệt giữa người dùng và lược đồ trong Oracle là gì?
Câu trả lời:
Từ hỏi Tom
Bạn nên coi một lược đồ là tài khoản người dùng và tập hợp tất cả các đối tượng trong đó như một lược đồ cho tất cả các ý định và mục đích.
SCOTT là một lược đồ bao gồm các bảng EMP, DEPT và BONUS với các khoản trợ cấp khác nhau và các công cụ khác.
SYS là một lược đồ bao gồm hàng tấn bảng, dạng xem, trợ cấp, v.v.
HỆ THỐNG là một lược đồ .....
Về mặt kỹ thuật - Lược đồ là tập hợp siêu dữ liệu (từ điển dữ liệu) được sử dụng bởi cơ sở dữ liệu, thường được tạo bằng DDL. Một lược đồ xác định các thuộc tính của cơ sở dữ liệu, chẳng hạn như bảng, cột và thuộc tính. Lược đồ cơ sở dữ liệu là một mô tả về dữ liệu trong cơ sở dữ liệu.
Tôi tin rằng vấn đề là Oracle sử dụng thuật ngữ lược đồ hơi khác so với những gì nó thường có nghĩa.
Lược đồ theo nghĩa 2. tương tự, nhưng không giống lược đồ theo nghĩa 1. Ví dụ: đối với một ứng dụng sử dụng nhiều tài khoản DB, một lược đồ theo nghĩa 2 có thể bao gồm một số lược đồ Oracle :-).
Lược đồ cộng cũng có thể có nghĩa là một loạt các thứ khác, khá không liên quan trong các bối cảnh khác (ví dụ trong toán học).
Oracle chỉ nên sử dụng một thuật ngữ như "userarea" hoặc "accountobjects", thay vì quá tải "lược đồ" ...
Từ WikiAnswers :
Hơn nữa, người dùng có thể truy cập các đối tượng trong các lược đồ khác ngoài chính họ, nếu họ có quyền làm như vậy.
Hãy nghĩ về người dùng như bạn vẫn thường làm (tên người dùng / mật khẩu có quyền truy cập để đăng nhập và truy cập một số đối tượng trong hệ thống) và một lược đồ là phiên bản cơ sở dữ liệu của thư mục chính của người dùng. Người dùng "foo" thường tạo ra những thứ trong lược đồ "foo" chẳng hạn, nếu người dùng "foo" tạo hoặc tham chiếu đến bảng "thanh" thì Oracle sẽ cho rằng người dùng có nghĩa là "foo.bar".
Câu trả lời này không xác định sự khác biệt giữa chủ sở hữu và lược đồ nhưng tôi nghĩ rằng nó bổ sung vào cuộc thảo luận.
Trong thế giới nhỏ bé của tôi suy nghĩ:
Tôi đã vật lộn với ý tưởng rằng tôi tạo ra N số người dùng mà tôi muốn mỗi người dùng này "tiêu thụ" (hay còn gọi là sử dụng) một lược đồ duy nhất.
Tim tại oracle-base.com chỉ ra cách làm điều này (có N số người dùng và mỗi người dùng này sẽ được "chuyển hướng" đến một lược đồ duy nhất.
Ông có một cách tiếp cận "từ đồng nghĩa" thứ hai (không được liệt kê ở đây). Tôi chỉ trích dẫn phiên bản CURRENT_SCHema (một trong những cách tiếp cận của anh ấy) ở đây:
CURRENT_SCHEMA
Tiếp cậnPhương pháp này sử dụng
CURRENT_SCHEMA
thuộc tính phiên để tự động trỏ người dùng ứng dụng vào lược đồ chính xác.Đầu tiên, chúng tôi tạo chủ sở hữu lược đồ và người dùng ứng dụng.
CONN sys/password AS SYSDBA -- Remove existing users and roles with the same names. DROP USER schema_owner CASCADE; DROP USER app_user CASCADE; DROP ROLE schema_rw_role; DROP ROLE schema_ro_role; -- Schema owner. CREATE USER schema_owner IDENTIFIED BY password DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON users; GRANT CONNECT, CREATE TABLE TO schema_owner; -- Application user. CREATE USER app_user IDENTIFIED BY password DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp; GRANT CONNECT TO app_user;
Lưu ý rằng người dùng ứng dụng có thể kết nối, nhưng không có bất kỳ hạn ngạch hoặc đặc quyền không gian bảng nào để tạo các đối tượng.
Tiếp theo, chúng tôi tạo một số vai trò để cho phép truy cập đọc và ghi.
CREATE ROLE schema_rw_role; CREATE ROLE schema_ro_role;
Chúng tôi muốn cung cấp cho người dùng ứng dụng quyền truy cập đọc-ghi vào các đối tượng lược đồ, vì vậy chúng tôi cấp vai trò liên quan.
GRANT schema_rw_role TO app_user;
Chúng ta cần đảm bảo rằng người dùng ứng dụng có lược đồ mặc định của nó trỏ đến chủ sở hữu lược đồ, vì vậy chúng ta tạo một trình kích hoạt SAU LOGON để làm điều này cho chúng ta.
CREATE OR REPLACE TRIGGER app_user.after_logon_trg AFTER LOGON ON app_user.SCHEMA BEGIN DBMS_APPLICATION_INFO.set_module(USER, 'Initialized'); EXECUTE IMMEDIATE 'ALTER SESSION SET current_schema=SCHEMA_OWNER'; END; /
Bây giờ chúng tôi đã sẵn sàng để tạo một đối tượng trong chủ sở hữu lược đồ.
CONN schema_owner/password CREATE TABLE test_tab ( id NUMBER, description VARCHAR2(50), CONSTRAINT test_tab_pk PRIMARY KEY (id) ); GRANT SELECT ON test_tab TO schema_ro_role; GRANT SELECT, INSERT, UPDATE, DELETE ON test_tab TO schema_rw_role;
Lưu ý cách các đặc quyền được cấp cho các vai trò liên quan. Nếu không có điều này, các đối tượng sẽ không hiển thị cho người dùng ứng dụng. Bây giờ chúng ta có một chủ sở hữu lược đồ chức năng và người dùng ứng dụng.
SQL> CONN app_user/password Connected. SQL> DESC test_tab Name Null? Type ----------------------------------------------------- -------- ------------------------------------ ID NOT NULL NUMBER DESCRIPTION VARCHAR2(50) SQL>
Phương thức này là lý tưởng trong đó người dùng ứng dụng chỉ đơn giản là một điểm nhập thay thế cho lược đồ chính, không yêu cầu đối tượng của riêng nó.
Nó rất đơn giản.
If USER has OBJECTS
then call it SCHEMA
else
call it USER
end if;
Một người dùng có thể được cấp quyền truy cập vào các đối tượng lược đồ thuộc sở hữu của những Người dùng khác nhau.
Schema là sự gói gọn của DB.objects về một ý tưởng / miền của giới thiệu và được sở hữu bởi MỘT người dùng. Sau đó, nó sẽ được chia sẻ bởi những người dùng / ứng dụng khác với vai trò bị triệt tiêu. Vì vậy, người dùng không cần sở hữu một lược đồ, nhưng một lược đồ cần phải có chủ sở hữu.
Tài khoản người dùng giống như người thân giữ chìa khóa nhà của bạn, nhưng không sở hữu bất cứ thứ gì, tức là tài khoản người dùng không sở hữu bất kỳ đối tượng cơ sở dữ liệu nào ... không có từ điển dữ liệu ...
Trong khi đó một lược đồ là sự đóng gói các đối tượng cơ sở dữ liệu. Giống như chủ sở hữu của ngôi nhà sở hữu mọi thứ trong nhà của bạn và tài khoản người dùng sẽ chỉ có thể truy cập vào hàng hóa tại nhà khi chủ sở hữu tức là lược đồ cấp các khoản trợ cấp cần thiết cho nó.
--USER và SCHema
Cả hai từ người dùng và lược đồ là trao đổi lẫn nhau, đó là lý do tại sao hầu hết mọi người nhầm lẫn về từ này bên dưới tôi đã giải thích sự khác biệt giữa chúng
- Người dùng người dùng là tài khoản để kết nối cơ sở dữ liệu (Máy chủ). chúng ta có thể tạo người dùng bằng cách sử dụng CREATE USER_name IDENTifyED BY mật khẩu.
--Lược đồ
Trên thực tế Cơ sở dữ liệu Oracle chứa cấu trúc logic và vật lý để xử lý dữ liệu. Cấu trúc logic cũng để xử lý dữ liệu trong Cơ sở dữ liệu (Thành phần bộ nhớ). Nó được tạo tự động bởi oracle khi người dùng tạo. Nó chứa tất cả các đối tượng được tạo bởi người dùng được liên kết với lược đồ đó. Ví dụ: nếu tôi tạo một người dùng có tên santhosh thì oracle tạo một lược đồ gọi là santhosh, oracle lưu trữ tất cả các đối tượng được tạo bởi người dùng santhosh trong santhosh lược đồ.
Chúng ta có thể tạo lược đồ bằng câu lệnh CREATE SCHema, nhưng Oracle Tự động tạo người dùng cho lược đồ đó.
Chúng ta có thể loại bỏ lược đồ bằng cách sử dụng câu lệnh DROP SCHema schama_name RESTRICT nhưng nó không thể xóa scehema chứa các đối tượng, vì vậy để loại bỏ lược đồ phải trống. Trong trường hợp từ hạn chế chỉ định lược đồ đó với các đối tượng.
Nếu chúng tôi cố gắng thả người dùng chứa các đối tượng trong lược đồ của mình, chúng tôi phải chỉ định từ CASCADE vì oracle không cho phép bạn xóa người dùng chứa các đối tượng. DROP USER user_name CASCADE để oracle xóa các đối tượng trong lược đồ và sau đó nó tự động loại bỏ người dùng, Các đối tượng được giới thiệu đến các đối tượng lược đồ này từ các lược đồ khác như các khung nhìn và các từ đồng nghĩa riêng đến trạng thái không hợp lệ.
Tôi hy vọng bây giờ bạn có sự khác biệt giữa chúng, nếu bạn có bất kỳ nghi ngờ nào về chủ đề này, xin vui lòng hỏi.
Cảm ơn bạn.
Người dùng lược đồ và cơ sở dữ liệu giống nhau nhưng nếu lược đồ sở hữu các đối tượng cơ sở dữ liệu và họ có thể làm bất cứ điều gì đối tượng của họ nhưng người dùng chỉ cần truy cập vào các đối tượng, họ không thể thực hiện bất kỳ hoạt động DDL nào cho đến khi người dùng lược đồ cung cấp cho bạn các đặc quyền thích hợp.
Dựa trên kiến thức nhỏ của tôi về Oracle ... NGƯỜI DÙNG và SCHema có phần giống nhau. Nhưng đó cũng là một sự khác biệt lớn. NGƯỜI DÙNG có thể được gọi là SCHema nếu "NGƯỜI DÙNG" sở hữu bất kỳ đối tượng nào, nếu không ... nó sẽ chỉ còn là "NGƯỜI DÙNG". Khi NGƯỜI DÙNG sở hữu ít nhất một đối tượng thì nhờ tất cả các định nghĩa của bạn ở trên .... NGƯỜI DÙNG giờ đây có thể được gọi là SCHema.
Người dùng: Truy cập vào tài nguyên của cơ sở dữ liệu. Giống như một chìa khóa để vào một ngôi nhà.
Schema: Thu thập thông tin về các đối tượng cơ sở dữ liệu. Giống như Index trong cuốn sách của bạn có chứa thông tin ngắn về chương này.
Đối với hầu hết những người quen thuộc với MariaDB hoặc MySQL, điều này có vẻ hơi khó hiểu vì trong MariaDB hoặc MySQL, họ có các lược đồ khác nhau (bao gồm các bảng khác nhau, dạng xem, khối PLQuery và các đối tượng DB, v.v.) và NGƯỜI DÙNG là những tài khoản có thể truy cập vào lược đồ. Do đó, không người dùng cụ thể nào có thể thuộc về bất kỳ lược đồ cụ thể nào. Sự cho phép đã được trao cho Schema đó sau đó người dùng có thể truy cập nó. Người dùng và Lược đồ được phân tách trong cơ sở dữ liệu như MySQL và MariaDB.
Trong lược đồ Oracle và người dùng gần như được đối xử như nhau. Để làm việc với lược đồ đó, bạn cần có sự cho phép, nơi bạn sẽ cảm thấy rằng tên lược đồ không có gì ngoài tên người dùng. Quyền có thể được trao trên các lược đồ để truy cập các đối tượng cơ sở dữ liệu khác nhau từ các lược đồ khác nhau. Trong oracle chúng ta có thể nói rằng người dùng sở hữu một lược đồ bởi vì khi bạn tạo người dùng, bạn tạo các đối tượng DB cho nó và ngược lại.
Schema là một thùng chứa các đối tượng. Nó thuộc sở hữu của một người dùng.
A
có thể có toàn quyền quản trị đối với lược đồ B
, thì người dùng sau sẽ luôn thuộc quyền sở hữu của người dùng B
, ngay cả khi không ai đăng nhập bằng tên người dùng như vậy.
Chà, tôi đã đọc ở đâu đó rằng nếu người dùng cơ sở dữ liệu của bạn có các đặc quyền DDL thì đó là lược đồ, nếu không thì đó là người dùng.