¿Diferencia entre un usuario y un esquema en Oracle?


314

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


17
+1 Siempre me he preguntado acerca de la distinción también: - /.
sleske

99
A continuación hay un artículo interesante que aclara todas las dudas: http://radiofreetooting.blogspot.com/2007/02/user-schema.html
Sandeep Jindal

99
Los esquemas de Oracle son como las carpetas Mis documentos en el sistema operativo Windows. Un usuario puede otorgar permisos a otros usuarios para ver cosas en su esquema. El esquema de Oracle es esencialmente el espacio de trabajo de un usuario.
Tarzán

3
También discutido en DBA: dba.stackexchange.com/questions/37012/… .

Respuestas:


136

De Ask Tom

Debe considerar que un esquema es 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 varias subvenciones y otras cosas.

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

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


47
Desde la misma página: para todos los efectos, considere usuario = esquema = usuario = esquema = lo mismo.
Sengs

44
¿Pero puedo tener dos usuarios usando el mismo esquema?
John John Pichler

66
Si quiere decir "¿pueden los objetos en un solo esquema ser 'propiedad' de múltiples usuarios?", La respuesta es No. Si quiere decir "¿pueden los objetos en un solo esquema ser utilizados por múltiples usuarios?", La respuesta es ciertamente Sí
Mahesh

95

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

  1. 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, aproximadamente equivalente a una cuenta de usuario
  2. Esquema en general: el conjunto de todas las tablas, sprocs, etc. que componen 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 puede consistir en varios esquemas de Oracle :-).

El esquema plus también puede significar un montón de otras cosas bastante poco relacionadas en otros contextos (por ejemplo, en matemáticas).

Oracle debería haber usado un término como "userarea" o "accountobjects", en lugar de sobrecargar el "esquema" ...


@djangofan Afaik esta pregunta es sobre Oracle y no sobre MS SQL.
peterh - Restablece a Monica

62

De WikiAnswers :

  • Un esquema es una colección de objetos de base de datos, incluidas estructuras lógicas como tablas, vistas, secuencias, procedimientos almacenados, sinónimos, índices, clústeres y enlaces de bases de datos.
  • Un usuario posee un esquema.
  • Un usuario y un esquema tienen el mismo nombre.
  • El comando CREAR USUARIO crea un usuario. También crea automáticamente un esquema para ese usuario.
  • El comando CREATE SCHEMA no crea un "esquema" como implica, solo 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 a un usuario como un esquema y un esquema como un usuario.

Además, un usuario puede acceder a objetos en esquemas distintos al suyo, si tiene permiso para hacerlo.


3
buen punto re CREATE SCHEMA - ¡un nombre mal elegido para el comando, creo!
Jeffrey Kemp

44
"El comando CREATE SCHEMA no crea un" esquema "como implica". Creo que el 99% de la confusión proviene de esto. Y este fragmento de oración lo aclara muy bien. Gracias.
granadaCoder


Creo que esta es la mejor respuesta.
hagrawal

50

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 bajo el esquema "foo", por ejemplo, si el usuario "foo" crea o se refiere a la tabla "bar", Oracle asumirá que el usuario significa "foo.bar".


2
descripción ordenada, pero ¿por qué has usado "foo" tanto para el usuario como para el esquema ?! ¿Tienen que ser iguales?
JonnyRaa

En Oracle, USER es el nombre de la cuenta, SCHEMA es el conjunto de objetos que posee ese usuario. Sin embargo, Oracle crea el objeto SCHEMA como parte de la declaración CREATE USER y SCHEMA tiene el mismo nombre que el USER, pero se observa lo mismo. Por supuesto, la confusión se debe en parte al hecho de que existe una correspondencia biunívoca entre el USUARIO y SCHEMA, y el esquema de un usuario comparte su nombre.
Mahesh

17

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

En mi pequeño mundo de pensamiento:

Me ha costado la idea de crear un número N de usuarios donde quiero que cada uno de estos usuarios "consuma" (es decir, use) un solo esquema.

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

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

CURRENT_SCHEMA Acercarse

Este método utiliza el CURRENT_SCHEMAatributo de sesión para apuntar 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-escritura y de solo lectura.

CREATE ROLE schema_rw_role;
CREATE ROLE schema_ro_role;

Queremos dar a nuestro usuario de la aplicación acceso de lectura y escritura a los objetos del esquema, por lo que 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 activador DESPUÉS DEL INICIO DE SESIÓN para que lo haga 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 funcional 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.


1
Tenga en cuenta que el uso de roles puede no resolver problemas de permisos para el código PL / SQL. Las concesiones de objetos a roles no se propagan de manera intuitiva cuando se ejecutan los procedimientos almacenados. Sin embargo, voté por esta respuesta porque este enfoque es realmente genial, pero es poco conocido y rara vez se usa hasta donde puedo decir.
Andrew Wolfe

15

Es muy simple.

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

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


1
En realidad, la confusión se crea cuando las personas llaman: el usuario es el esquema. Como usuario puede no ser esquema como usted explicó. Un usuario podría ser simplemente un usuario que acceda a algún otro Esquema de usuario.
Sandeep Jindal

3

Schema es una encapsulación de DB.objects sobre una idea / dominio de interés, y es 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.


1

Una cuenta de usuario es como familiares 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 en su casa y una cuenta de usuario podrá acceder a los bienes en la casa solo cuando el propietario, es decir, el esquema le otorgue las subvenciones necesarias.


1

--USUARIO y ESQUEMA

Las dos palabras usuario y esquema son intercambiables, es por eso que la mayoría de las personas se confunden con estas palabras a continuación. Expliqué la diferencia entre ellas.

- Usuario Usuario es una cuenta para conectar la base de datos (Servidor). podemos crear usuarios usando CREAR USUARIO nombre_usuario IDENTIFICADO POR contraseña.

--Esquema

En realidad, Oracle Database contiene estructuras lógicas y físicas para procesar los datos. El esquema también es una estructura lógica para procesar los datos en la base de datos (componente de memoria). Se crea automáticamente por Oracle cuando el usuario lo crea. 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, oracle almacena todos los objetos creados por el usuario santhosh en santhosh esquema.

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

Podemos soltar el esquema usando la instrucción DROP SCHEMA schama_name RESTRICT pero no puede eliminar scehema que contiene objetos, por lo que para soltar el esquema debe estar vacío. Aquí la palabra restringida especifica con fuerza ese esquema sin objetos.

Si intentamos eliminar un usuario que contenga objetos en su esquema, debemos especificar la palabra CASCADA porque Oracle no le permite eliminar objetos que contienen usuarios. DROP USER user_name CASCADE para que Oracle elimine los objetos en el esquema y luego suelte al usuario automáticamente. Los objetos referidos a este esquema objetos de otras vistas de esquema y sinónimos privados pasan a un estado no válido.

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

Gracias.


0

Los usuarios de un esquema y una base de datos son los mismos, pero si el esquema posee objetos de la base de datos y pueden hacer cualquier cosa con su objeto, pero el usuario solo accede a los objetos, no pueden HACER ninguna operación DDL hasta que el usuario del esquema le otorgue los privilegios adecuados.


0

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 un ESQUEMA si el "USUARIO" posee algún objeto, de lo contrario ... solo seguirá siendo un "USUARIO". Una vez que el USUARIO posee al menos un objeto, en virtud de todas sus definiciones anteriores ... ahora se puede llamar al ESQUEMA.


0

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

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

Mira aquí para más detalles


0

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 esos esquema. Por lo tanto, ningún usuario específico puede pertenecer a un esquema particular. El permiso se debe otorgar a ese esquema para que el usuario pueda acceder a él. Los usuarios y el esquema están separados en bases de datos como MySQL y MariaDB.

En Oracle, el esquema y los usuarios son casi tratados como iguales. Para trabajar con ese esquema, debe 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 de base de datos para él y viceversa.


-1

El esquema es un contenedor de objetos. Es propiedad de un usuario.


1
Eso implica que un usuario puede poseer múltiples esquemas. No creo que sea posible (en Oracle); Si bien el usuario Apuede tener derechos de administrador completos sobre el esquema B, este último siempre será propiedad del usuario B, incluso si nadie inicia sesión con dicho nombre de usuario.

-1

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


En realidad, esta es una distinción útil: usuarios con privilegios CREATE distintos de aquellos sin privilegios CREATE
Andrew Wolfe el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.