首页 文章

Oracle中用户和架构之间的区别?

提问于
浏览
281

Oracle中的用户和架构有什么区别?

15 回答

  • 0

    这个答案没有定义所有者和架构之间的区别,但我认为它增加了讨论 .

    在我的小思维世界中:

    我一直在努力创建N个用户,我希望这些用户中的每一个都“消费”(也称为使用)单个模式 .

    Tim at oracle-base.com shows how to do this(具有N个用户,并且每个用户将"redirected"为单个架构 .

    他有第二种“同义词”方法(此处未列出) . 我这里只引用CURRENT_SCHEMA版本(他的一种方法):

    CURRENT_SCHEMA方法此方法使用CURRENT_SCHEMA会话属性自动将应用程序用户指向正确的架构 . 首先,我们创建架构所有者和应用程序用户 . CONN sys / password AS SYSDBA

    • 删除具有相同名称的现有用户和角色 .
      DROP USER schema_owner CASCADE;
      DROP USER app_user CASCADE;
      DROP ROLE schema_rw_role;
      DROP ROLE schema_ro_role;

    • 架构所有者 .
      CREATE USER schema_owner IDENTIFIED BY密码
      DEFAULT TABLESPACE用户
      TEMPORARY TABLESPACE临时
      QUOTA无限用户;

    GRANT CONNECT,CREATE TABLE TO schema_owner;

    • 应用程序用户 .
      CREATE USER app_user IDENTIFIED BY password
      DEFAULT TABLESPACE用户
      TEMPORARY TABLESPACE临时;

    GRANT CONNECT TO app_user;
    请注意,应用程序用户可以连接,但没有任何表空间配额或权限来创建对象 . 接下来,我们创建一些角色以允许读写和只读访问 . CREATE ROLE schema_rw_role;
    CREATE ROLE schema_ro_role;
    我们希望为应用程序用户提供对架构对象的读写访问权限,因此我们授予相关角色 . GRANT schema_rw_role TO app_user;
    我们需要确保应用程序用户的默认架构指向架构所有者,因此我们创建了一个AFTER LOGON触发器来为我们执行此操作 . 创建或替换TRIGGER app_user.after_logon_trg
    登录后登录app_user.SCHEMA
    开始
    DBMS_APPLICATION_INFO.set_module(USER,'Initialized');
    EXECUTE IMMEDIATE'ALTER SESSION SET current_schema = SCHEMA_OWNER';
    结束;
    /
    现在我们准备在架构所有者中创建一个对象 . CONN schema_owner /密码

    CREATE TABLE test_tab(
    身份证号码,
    描述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
    连接的 .
    SQL> DESC test_tab
    名字空?类型


    ID NOT NULL NUMBER
    VARCHAR2(50)

    SQL>
    此方法非常适用于应用程序用户只是主模式的替代入口点,不需要自己的对象 .

  • 17

    用户帐户就像持有家钥匙的亲戚,但不拥有任何东西,即用户帐户不拥有任何数据库对象......没有数据字典......

    而模式是数据库对象的封装 . 就像房子的拥有者拥有你家里的所有东西一样,只有当所有者即架构给予所需的补助时,用户帐户才能在家中访问货物 .

  • 0

    这很简单 .

    If USER has OBJECTS
    then call it SCHEMA
    else
         call it USER
    end if;
    

    可以向用户授予对不同用户拥有的模式对象的访问权 .

  • 3

    像往常一样考虑用户(可以访问登录和访问系统中某些对象的用户名/密码)和作为用户主目录的数据库版本的模式 . 用户“foo”通常在模式“foo”下创建事物,例如,如果用户“foo”创建或引用表“bar”,则Oracle将假定用户表示“foo.bar” .

  • 86

    Schema是DB.objects关于intrest的想法/域的封装,由ONE用户拥有 . 然后,它将由具有被抑制角色的其他用户/应用程序共享 . 因此,用户不需要拥有架构,但架构需要拥有所有者 .

  • 0

    来自Ask Tom

    您应该将模式视为用户帐户,并将其中所有对象的集合视为所有意图和目的的模式 .

    SCOTT是一个模式,包括带有各种授权的EMP,DEPT和BONUS表以及其他内容 .

    SYS是一种包含大量表格,视图,授权等的模式等 .

    SYSTEM是一个模式.....

    技术上 - 模式是数据库使用的元数据集(数据字典),通常使用DDL生成 . 模式定义数据库的属性,例如表,列和属性 . 数据库模式是数据库中数据的描述 .

  • 0

    用户:访问数据库的资源 . 像一个进入房子的关键 .

    架构:有关数据库对象的信息的集合 . 就像书中的索引一样,其中包含有关章节的简短信息 .

    Look here for details

  • 49

    对于大多数对MariaDB或MySQL更熟悉的人来说,这似乎有点令人困惑,因为在MariaDB或MySQL中他们有不同的模式(包括不同的表,视图,PLSQL块和数据库对象等),USERS是可以访问这些模式的帐户架构 . 因此,没有特定用户可以属于任何特定架构 . 该权限必须授予该Schema,然后用户可以访问它 . 用户和架构在MySQL和MariaDB等数据库中分开 .

    在Oracle模式中,用户几乎被视为相同 . 要使用该模式,您需要具有权限,您将感觉模式名称只是用户名 . 可以跨模式提供权限以从不同模式访问不同的数据库对象 . 在oracle中我们可以说用户拥有一个模式,因为当你创建一个用户时,你会为它创建数据库对象,反之亦然 .

  • 13

    来自WikiAnswers

    • 模式是数据库对象的集合,包括逻辑结构,如表,视图,序列,存储过程,同义词,索引,集群和数据库链接 .

    • 用户拥有架构 .

    • 用户和架构具有相同的名称 .

    • CREATE USER命令创建用户 . 它还会自动为该用户创建架构 .

    • CREATE SCHEMA命令不会创建"schema",因为它意味着它只允许您在单个事务中创建多个表和视图并在您自己的模式中执行多个授权 .

    • 对于所有意图和目的,您可以将用户视为架构,并将架构视为用户 .

    此外,如果用户有权这样做,则用户可以访问自己以外的模式中的对象 .

  • 0

    模式和数据库用户是相同的,但如果模式拥有数据库对象,并且他们可以对对象执行任何操作,但用户只是访问对象,则在模式用户为您提供适当的权限之前,他们无法执行任何DDL操作 .

  • -1

    基于我对Oracle的一点知识...... USER和SCHEMA有点类似 . 但也存在重大差异 . 如果“USER”拥有任何对象,则可以将USER称为SCHEMA,否则......它将仅保留为“USER” . 一旦USER拥有至少一个对象,那么凭借上面的所有定义......现在可以将USER称为SCHEMA .

  • -1

    好吧,我在某处读到,如果您的数据库用户具有DDL权限,那么它就是一个模式,否则它就是一个用户 .

  • 1

    我认为问题在于Oracle使用术语schema与它通常意味着的略有不同 .

    • Oracle 's schema (as explained in Nebakanezer'答案):基本上是用户帐户拥有的所有表和其他对象的集合,因此大致相当于一个用户帐户

    • 一般模式:构成给定系统/应用程序数据库的所有表,sprocs等的集合(如"Developers should discuss with the DBAs about the schema for our new application.")

    意义2中的模式与意义1中的模式类似,但不同 . 对于使用多个DB帐户的应用程序,意义2中的模式可能包含多个Oracle模式:-) .

    在其他环境中(例如在数学中),加上模式也意味着一堆其他相当不相关的东西 .

    Oracle应该使用像“userarea”或“accountobjects”这样的术语,而不是在“schema”中重载...

  • 117

    Schema是一个对象的容器 . 它由用户拥有 .

  • 53

    --USER和SCHEMA

    用户和架构这两个词是可互换的,这就是为什么大多数人对下面的这个词感到困惑,我解释了它们之间的区别

    • 用户用户是连接数据库(服务器)的帐户 . 我们可以使用CREATE USER user_name IDENTIFIED BY密码创建用户 .

    --schema

    实际上,Oracle数据库包含处理数据的逻辑和物理结构 . 模式也是逻辑结构,用于处理数据库(存储器组件)中的数据 . 它在用户创建时由oracle自动创建 . 它包含由与该模式关联的用户创建的所有对象 . 例如,如果我创建了名为santhosh的用户,那么oracle创建一个名为santhosh的模式,oracle将用户santhosh创建的所有对象存储在santhosh中架构 .

    我们可以通过CREATE SCHEMA语句创建模式,但Oracle自动为该模式创建用户 .

    我们可以使用DROP SCHEMA schama_name RESTRICT语句删除模式但是它不能删除包含对象的scehema,因此要删除模式它必须为空 . 其中限制字强制指定具有out对象的模式 .

    如果我们尝试删除用户在其模式中包含对象,我们必须指定CASCADE单词,因为oracle不允许您删除用户包含的对象 . DROP USER user_name CASCADE所以oracle删除模式中的对象然后自动删除用户,从其他模式(如视图和私有同义词)引用此模式对象的对象变为无效州 .

    我希望现在你们之间有所区别,如果你对这个话题有任何疑问,请随时提出 .

    谢谢 .

相关问题