Sự khác biệt giữa người dùng và lược đồ trong Oracle?


314

Sự khác biệt giữa người dùng và lược đồ trong Oracle là gì?


17
+1 Tôi cũng luôn tự hỏi về sự khác biệt: - /.
sleske

9
Có một bài viết thú vị dưới đây sẽ xóa tất cả những nghi ngờ: http
//radiofreet Boot.blogspot.com/2007/02/user-schema.html

9
Các lược đồ của Oracle giống như các thư mục Tài liệu của tôi trong HĐH Windows. Một người dùng có thể cấp quyền cho người dùng khác để xem mọi thứ trong lược đồ của họ. Lược đồ Oracle về cơ bản là không gian làm việc của người dùng.
Tarzan

3
Cũng thảo luận về DBA: dba.stackexchange.com/questions/37012/ ,.

Câu trả lời:


136

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.


47
Từ cùng một trang: đối với tất cả ý định và mục đích, chỉ cần xem xét user = lược đồ = user = lược đồ = cùng một điều.
sengs

4
Nhưng tôi có thể có hai người dùng sử dụng cùng một lược đồ không?
John John Pichler

6
Nếu bạn có nghĩa là "các đối tượng trong một lược đồ có thể được 'sở hữu' bởi nhiều người dùng" thì câu trả lời là Không. Nếu bạn có nghĩa là "các đối tượng trong một lược đồ có thể được sử dụng bởi nhiều người dùng" thì câu trả lời chắc chắn là Có
Mahesh

95

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.

  1. Lược đồ của Oracle (như được giải thích trong câu trả lời của Nebakanezer): về cơ bản là tập hợp tất cả các bảng và các đối tượng khác thuộc sở hữu của một tài khoản người dùng, tương đương với tài khoản người dùng
  2. Lược đồ nói chung: Tập hợp tất cả các bảng, sprocs, vv tạo nên cơ sở dữ liệu cho một hệ thống / ứng dụng nhất định (như trong "Các nhà phát triển nên thảo luận với các DBA về lược đồ cho ứng dụng mới của chúng tôi.")

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 đồ" ...


@djangofan Afaik câu hỏi này là về Oracle, chứ không phải về MS SQL.
peterh - Phục hồi Monica

62

Từ WikiAnswers :

  • Một lược đồ là tập hợp các đối tượng cơ sở dữ liệu, bao gồm các cấu trúc logic như bảng, khung nhìn, chuỗi, thủ tục được lưu trữ, từ đồng nghĩa, chỉ mục, cụm và liên kết cơ sở dữ liệu.
  • Một người dùng sở hữu một lược đồ.
  • Một người dùng và một lược đồ có cùng tên.
  • Lệnh CREATE USER tạo người dùng. Nó cũng tự động tạo một lược đồ cho người dùng đó.
  • Lệnh CREATE SCHema không tạo ra một "lược đồ" như ngụ ý, nó chỉ cho phép bạn tạo nhiều bảng và dạng xem và thực hiện nhiều cấp trong lược đồ của riêng bạn trong một giao dịch.
  • Đối với tất cả ý định và mục đích, bạn có thể coi người dùng là lược đồ và lược đồ là người dùng.

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.


3
điểm tốt là TẠO SCHema - một tên được chọn kém cho lệnh tôi sẽ nghĩ!
Jeffrey Kemp

4
"Lệnh CREATE SCHema không tạo ra" lược đồ "như ngụ ý". Tôi nghĩ rằng 99% sự nhầm lẫn đến từ điều này. Và đoạn này xóa nó rất tốt. Cảm ơn bạn.
mã hóa granada


Tôi nghĩ rằng đây là câu trả lời tốt nhất.
hagrawal

50

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".


2
mô tả gọn gàng nhưng tại sao bạn lại sử dụng "foo" cho cả người dùng và lược đồ?! Họ có phải giống nhau không?
JonnyRaa

Trong Oracle, USER là tên tài khoản, SCHema là tập hợp các đối tượng thuộc sở hữu của người dùng đó. Mặc dù, Oracle tạo đối tượng SCHema như một phần của câu lệnh CREATE USER và SCHema có cùng tên với USER nhưng họ lưu ý điều tương tự. Tất nhiên, sự nhầm lẫn xuất phát một phần từ thực tế là có một sự tương ứng một-một giữa USER và SCHema, và một lược đồ của người dùng chia sẻ tên của nó.
Mahesh

17

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ận

Phươ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ó.


1
Lưu ý việc sử dụng vai trò có thể không giải quyết các vấn đề về quyền đối với mã PL / SQL. Cấp đối tượng cho các vai trò không được truyền bá một cách trực quan khi các thủ tục lưu trữ được biên dịch được chạy. Tuy nhiên, tôi đã đưa ra câu trả lời này vì cách tiếp cận này thực sự tuyệt vời, nhưng nó ít được biết đến và hiếm khi được sử dụng theo như tôi có thể nói.
Andrew Wolfe

15

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.


1
Trên thực tế, sự nhầm lẫn được tạo ra khi mọi người gọi - Người dùng là Schema. Là người dùng có thể không phải là lược đồ như bạn đã giải thích. Một người dùng có thể đơn giản là một người dùng truy cập một số Lược đồ người dùng khác.
Sandeep Jindal

3

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.


1

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ó.


1

--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.


0

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.


0

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.


0

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.

Nhìn vào đây để biết chi tiết


0

Đố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.


-1

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.


1
Điều đó ngụ ý rằng một người dùng có thể sở hữu nhiều lược đồ. Tôi không tin điều đó là có thể (trong Oracle); trong khi người dùng Acó 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.

-1

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.


Đây thực sự là một sự khác biệt hữu ích - người dùng có quyền riêng tư CREATE khác biệt với những người không có quyền riêng tư TẠO
Andrew Wolfe
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.