¿Diferencia entre un usuario y un esquema en Oracle?

¿Cuál es la diferencia entre un usuario y un esquema en Oracle?

De Ask Tom

Debería considerar un esquema como la cuenta de usuario y la colección de todos los objetos en él como un esquema para todos los propósitos y propósitos.

SCOTT es un esquema que incluye las tablas EMP, DEPT y BONUS con diversas subvenciones y otras cosas.

SYS es un esquema que incluye toneladas de tablas, vistas, subvenciones, etc. etc.

SISTEMA es un esquema …..

Técnicamente: un esquema es el conjunto de metadatos (diccionario de datos) utilizado por la base de datos, generalmente generado mediante DDL. Un esquema define atributos de la base de datos, como tablas, columnas y propiedades. Un esquema de base de datos es una descripción de los datos en una base de datos.

Creo que el problema es que Oracle usa el término esquema de forma ligeramente diferente de lo que generalmente significa.

  1. El esquema de Oracle (como se explica en la respuesta de Nebakanezer): básicamente el conjunto de todas las tablas y otros objetos propiedad de una cuenta de usuario, por lo que equivale aproximadamente a una cuenta de usuario
  2. Esquema en general: el conjunto de todas las tablas, sprocs, etc. que conforman la base de datos para un sistema / aplicación dado (como en “Los desarrolladores deben discutir con los DBA sobre el esquema para nuestra nueva aplicación”).

El esquema en el sentido 2. es similar, pero no es lo mismo que el esquema en el sentido 1. Por ejemplo, para una aplicación que utiliza varias cuentas de base de datos, un esquema en el sentido 2 podría consistir en varios esquemas de Oracle :-).

El esquema Plus también puede significar un montón de otras cosas que no tienen nada que ver con otros contextos (por ejemplo, en matemáticas).

Oracle debería haber usado un término como “userarea” o “accountobjects”, en lugar de sobrecargar en “schema” …

De WikiAnswers :

  • Un esquema es una colección de objetos de base de datos, que incluye estructuras lógicas como tablas, vistas, secuencias, procedimientos almacenados, sinónimos, índices, clústeres y enlaces a bases de datos.
  • Un usuario posee un esquema.
  • Un usuario y un esquema tienen el mismo nombre.
  • El comando CREATE USER crea un usuario. También crea automáticamente un esquema para ese usuario.
  • El comando CREATE SCHEMA no crea un “esquema”, ya que implica, simplemente le permite crear múltiples tablas y vistas y realizar múltiples concesiones en su propio esquema en una sola transacción.
  • Para todos los efectos, puede considerar que un usuario es un esquema y un esquema para ser un usuario.

Además, un usuario puede acceder a objetos en esquemas que no sean los suyos, si tienen permiso para hacerlo.

Piense en un usuario como lo hace normalmente (nombre de usuario / contraseña con acceso para iniciar sesión y acceder a algunos objetos en el sistema) y un esquema como la versión de la base de datos del directorio de inicio de un usuario. El usuario “foo” generalmente crea cosas en el esquema “foo”, por ejemplo, si el usuario “foo” crea o se refiere a la tabla “barra”, Oracle asumirá que el usuario significa “foo.bar”.

Esta respuesta no define la diferencia entre un propietario y un esquema, pero creo que se agrega a la discusión.

En mi pequeño mundo de pensamiento:

He luchado con la idea de crear N número de usuarios donde deseo que cada uno de estos usuarios “consum” (es decir, use) un único esquema.

Tim en oracle-base.com muestra cómo hacer esto (tiene N número de usuarios y cada uno de estos usuarios será “redirigido” a un único esquema).

Él tiene un segundo enfoque “sinónimo” (no listado aquí). Solo estoy citando la versión CURRENT_SCHEMA (uno de sus enfoques) aquí:

Enfoque CURRENT_SCHEMA

Este método utiliza el atributo de sesión CURRENT_SCHEMA para señalar automáticamente a los usuarios de la aplicación al esquema correcto.

Primero, creamos el propietario del esquema y un usuario de la aplicación.

 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; 

Tenga en cuenta que el usuario de la aplicación puede conectarse, pero no tiene cuotas de espacio de tabla o privilegios para crear objetos.

A continuación, creamos algunos roles para permitir el acceso de lectura y escritura y de solo lectura.

 CREATE ROLE schema_rw_role; CREATE ROLE schema_ro_role; 

Queremos otorgar a nuestra aplicación el acceso de lectura y escritura del usuario a los objetos del esquema, por lo que le otorgamos el rol relevante.

 GRANT schema_rw_role TO app_user; 

Necesitamos asegurarnos de que el usuario de la aplicación tenga su esquema predeterminado apuntando al propietario del esquema, por lo que creamos un desencadenador DESPUÉS DE INICIAR SESIÓN para hacer esto por nosotros.

 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; / 

Ahora estamos listos para crear un objeto en el propietario del esquema.

 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; 

Observe cómo se otorgan los privilegios a los roles relevantes. Sin esto, los objetos no serían visibles para el usuario de la aplicación. Ahora tenemos un propietario de esquema que funciona y un usuario de la aplicación.

 SQL> CONN app_user/password Connected. SQL> DESC test_tab Name Null? Type ----------------------------------------------------- -------- ------------------------------------ ID NOT NULL NUMBER DESCRIPTION VARCHAR2(50) SQL> 

Este método es ideal cuando el usuario de la aplicación es simplemente un punto de entrada alternativo al esquema principal, que no requiere objetos propios.

Es muy sencillo.

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

Un usuario puede tener acceso a objetos de esquema propiedad de diferentes usuarios.

Schema es una encapsulación de DB.objects sobre una idea / dominio de intrest, y propiedad de UN usuario. Luego será compartido por otros usuarios / aplicaciones con roles suprimidos. Por lo tanto, los usuarios no necesitan tener un esquema, pero un esquema debe tener un propietario.

–USUARIO y ESQUEMA

El usuario de ambas palabras y el esquema son intercambiables, por eso la mayoría de las personas confunden estas palabras a continuación. Expliqué la diferencia entre ellos.

–Usuario Usuario es una cuenta para conectar la base de datos (Servidor). podemos crear usuario utilizando CREATE USER nombre_usuario IDENTIFICADO POR contraseña.

–Esquema

En realidad, la base de datos Oracle contiene una estructura lógica y física para procesar los datos. El esquema también estructura lógica para procesar los datos en la base de datos (componente de memoria). Es creado automáticamente por Oracle cuando el usuario lo creó. Contiene todos los objetos creados por el usuario asociado a ese esquema. Por ejemplo, si creé un usuario con el nombre santhosh entonces Oracle crea un esquema llamado santhosh, el oracle almacena todos los objetos creados por el usuario santhosh en santhosh esquema.

Podemos crear un esquema mediante la instrucción CREATE SCHEMA, pero Oracle crea automáticamente un usuario para ese esquema.

Podemos descartar el esquema utilizando DROP SCHEMA schama_name RESTRICT pero no puede borrar scehema contiene objetos, por lo tanto, para soltar el esquema, debe estar vacío. En este caso, la palabra restringir especifica con fuerza ese esquema sin objetos.

Si intentamos que un usuario deje de contener objetos en su esquema, debemos especificar la palabra CASCADE porque oracle no le permite eliminar los objetos que contienen el usuario. DROP USER user_name CASCADE por lo que oracle elimina los objetos en el esquema y luego los suelta automáticamente. Los objetos referidos a este esquema son objetos de otras vistas tipo esquema y los sinónimos privados pasan a estado no válido.

Espero que ahora tenga la diferencia entre ellos, si tiene alguna duda sobre este tema, no dude en preguntar.

Gracias.

Los usuarios de esquema y base de datos son los mismos, pero si el esquema tiene objetos de base de datos propios y pueden hacer cualquier cosa con su objeto, pero el usuario solo accede a ellos, no pueden REALIZAR ninguna operación DDL hasta que el usuario del esquema le proporcione los privilegios adecuados.

Basado en mi poco conocimiento de Oracle … un USUARIO y un ESQUEMA son algo similares. Pero también hay una gran diferencia. Un USUARIO puede llamarse ESQUEMA si el “USUARIO” posee cualquier objeto, de lo contrario … solo seguirá siendo un “USUARIO”. Una vez que el USUARIO posee al menos un objeto, en virtud de todas las definiciones anteriores … el USUARIO ahora puede llamarse ESQUEMA.

Usuario: acceso al recurso de la base de datos. Como una llave para entrar a una casa.

Esquema: recostackción de información sobre objetos de base de datos. Como Index en su libro que contiene la breve información sobre el capítulo.

Mire aquí por detalles

Una cuenta de usuario es como parientes que tienen una llave de su casa, pero no posee nada, es decir, una cuenta de usuario no posee ningún objeto de base de datos … no hay diccionario de datos …

Mientras que un esquema es una encapsulación de objetos de base de datos. Es como el propietario de la casa que posee todo lo que hay en su casa y una cuenta de usuario solo podrá acceder a los bienes en el hogar cuando el propietario, es decir, el esquema, le otorgue las subvenciones necesarias.

Para la mayoría de las personas que están más familiarizadas con MariaDB o MySQL esto parece poco confuso porque en MariaDB o MySQL tienen diferentes esquemas (que incluyen diferentes tablas, vistas, bloques PLSQL y objetos DB, etc.) y los USUARIOS son las cuentas que pueden acceder a ellos esquema. Por lo tanto, ningún usuario específico puede pertenecer a ningún esquema en particular. El permiso debe otorgarse a ese Esquema y luego el usuario puede acceder a él. Los usuarios y el esquema están separados en bases de datos como MySQL y MariaDB.

En el esquema de Oracle, los usuarios son casi tratados de la misma manera. Para trabajar con ese esquema necesita tener el permiso, que es donde sentirá que el nombre del esquema no es más que el nombre de usuario. Se pueden otorgar permisos a través de esquemas para acceder a diferentes objetos de base de datos desde diferentes esquemas. En Oracle podemos decir que un usuario posee un esquema porque cuando crea un usuario crea objetos DB para él y viceversa.

Schema es un contenedor de objetos. Es propiedad de un usuario.

Bien, leí en alguna parte que si el usuario de su base de datos tiene los privilegios DDL, entonces es un esquema, de lo contrario es un usuario.