Oracle中的用户和架构有什么区别?
答案 0 :(得分:125)
来自Ask Tom
您应该将架构视为用户帐户和其中所有对象的集合 作为所有意图和目的的模式。
SCOTT是一个包含EMP,DEPT和BONUS表以及各种授权的模式 其他的东西。
SYS是一个包含大量表格,视图,授权等等的模式。
SYSTEM是一种模式......
技术上 - 架构是数据库使用的元数据集(数据字典), 通常使用DDL生成。模式定义数据库的属性,例如 表,列和属性。数据库模式是对数据的描述 数据库中。
答案 1 :(得分:93)
我认为问题在于Oracle使用术语架构与它通常意味着的略有不同。
意义上的模式2.与意义1中的模式类似,但不同。对于使用多个DB帐户的应用程序,意义2中的模式可能包含多个Oracle模式: - )。
Plus schema 在其他情境中也可能意味着一堆其他相当不相关的东西(例如在数学中)。
Oracle应该使用像“userarea”或“accountobjects”这样的术语,而不是重载“schema”......
答案 2 :(得分:58)
来自WikiAnswers:
此外,如果用户有权这样做,用户可以访问自己以外的模式中的对象。
答案 3 :(得分:49)
像往常一样考虑用户(可以访问登录和访问系统中某些对象的用户名/密码)和作为用户主目录的数据库版本的模式。用户“foo”通常在模式“foo”下创建,例如,如果用户“foo”创建或引用表“bar”,则Oracle将假定用户的意思是“foo.bar”。
答案 4 :(得分:17)
这个答案没有定义所有者和架构之间的区别,但我认为它会增加讨论。
在我的小思维世界里:
我一直在努力创建N个用户,我希望这些用户中的每个用户“消费”(也就是使用)单个模式。
Tim at oracle-base.com shows how to do this(拥有N个用户,并且每个用户都将“重定向”到单个架构。
他有第二种“同义词”方法(此处未列出)。我这里仅引用CURRENT_SCHEMA版本(他的一种方法):
CURRENT_SCHEMA
方法此方法自动使用
CURRENT_SCHEMA
会话属性 将应用程序用户指向正确的架构。首先,我们创建架构所有者和应用程序用户。
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;
请注意,应用程序用户可以连接,但没有任何连接 表空间配额或创建对象的权限。
接下来,我们创建一些角色以允许读写和只读访问。
CREATE ROLE schema_rw_role; CREATE ROLE schema_ro_role;
我们希望为应用程序用户提供对架构的读写访问权限 对象,所以我们授予相关的角色。
GRANT schema_rw_role TO app_user;
我们需要确保应用程序用户具有其默认架构 指向架构所有者,因此我们创建了一个AFTER LOGON触发器 为我们这样做。
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; /
现在我们已准备好在架构所有者中创建一个对象。
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;
请注意如何将权限授予相关角色。没有 这样,对象将不会对应用程序用户可见。我们现在 拥有一个正常运行的架构所有者和应用程序用户。
SQL> CONN app_user/password Connected. SQL> DESC test_tab Name Null? Type ----------------------------------------------------- -------- ------------------------------------ ID NOT NULL NUMBER DESCRIPTION VARCHAR2(50) SQL>
此方法适用于应用程序用户只是一个 主模式的替代入口点,不需要任何对象 它自己的。
答案 5 :(得分:14)
这很简单。
If USER has OBJECTS
then call it SCHEMA
else
call it USER
end if;
可以授予用户访问不同用户拥有的架构对象的权限。
答案 6 :(得分:3)
Schema是DB.objects关于intrest的想法/域的封装,由ONE用户拥有。然后它将被具有被抑制角色的其他用户/应用程序共享。因此,用户不需要拥有架构,但架构需要拥有所有者。
答案 7 :(得分:1)
- USER和SCHEMA
用户和架构这两个词是互换的,这就是为什么大多数人对下面的这个词感到困惑我解释了它们之间的区别
- 用户用户是连接数据库(服务器)的帐户。我们可以使用CREATE USER user_name IDENTIFIED BY password创建用户。
- 架构
实际上,Oracle数据库包含处理数据的逻辑和物理结构。模式也是逻辑结构,用于处理数据库(内存组件)中的数据。它在用户创建时由oracle自动创建。它包含由与该模式关联的用户创建的所有对象。例如,如果我创建了一个名为santhosh的用户,那么oracle创建一个名为santhosh的模式,oracle将用户santhosh创建的所有对象存储在santhosh中架构。
我们可以通过CREATE SCHEMA语句创建模式,但Oracle自动为该模式创建用户。
我们可以使用DROP SCHEMA schama_name RESTRICT语句删除模式但是它不能删除包含对象的scehema,因此要删除模式它必须为空。其中限制字强制指定该模式没有对象。
如果我们尝试删除用户在其架构中包含对象,我们必须指定CASCADE字,因为oracle不允许您删除用户包含的对象。 DROP USER user_name CASCADE 所以oracle删除模式中的对象,然后自动删除用户,对象从其他模式(如视图和私有同义词)引用此模式对象进入无效状态。
我希望你们之间有所区别,如果你对这个话题有任何疑问,请随时提出。
谢谢。
答案 8 :(得分:0)
架构和数据库用户是相同的,但如果架构拥有数据库对象,并且它们可以执行任何对象但用户只是访问对象,则在架构用户为您提供适当的权限之前,它们不能执行任何DDL操作。
答案 9 :(得分:0)
答案 10 :(得分:0)
用户帐户就像拥有家中钥匙的亲戚,但没有任何东西,即用户帐户不拥有任何数据库对象...没有数据字典......
而模式是数据库对象的封装。就像房子的拥有者拥有你家里的所有东西一样,只有当所有者即架构给予所需的补助时,用户帐户才能在家中访问货物。
答案 11 :(得分:0)
对于大多数对MariaDB或MySQL更熟悉的人来说,这似乎有点混乱,因为在MariaDB或MySQL中他们有不同的模式(包括不同的表,视图,PLSQL块和数据库对象等),而USERS是其中的帐户。可以访问这些架构。因此,没有特定用户可以属于任何特定架构。该权限必须授予该Schema,然后用户才能访问它。用户和架构在MySQL和MariaDB等数据库中分开。
在Oracle架构中,用户几乎被视为相同。要使用该模式,您需要具有权限,您将感觉模式名称只是用户名。可以跨模式提供权限,以从不同的模式访问不同的数据库对象。在oracle中我们可以说用户拥有一个模式,因为当你创建一个用户时,你会为它创建数据库对象,反之亦然。
答案 12 :(得分:-1)
Schema是一个对象的容器。 它由用户拥有。
答案 13 :(得分:-1)
好吧,我在某处读到,如果你的数据库用户拥有DDL权限,那么它就是一个模式,否则它就是一个用户。