¿Cuál es la diferencia entre un usuario y un esquema en Oracle?
¿Cuál es la diferencia entre un usuario y un esquema en Oracle?
Respuestas:
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.
Creo que el problema es que Oracle usa el término esquema ligeramente diferente de lo que generalmente significa.
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" ...
De WikiAnswers :
Además, un usuario puede acceder a objetos en esquemas distintos al suyo, si tiene 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 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".
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
AcercarseEste método utiliza el
CURRENT_SCHEMA
atributo 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.
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.
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.
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.
--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.
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.
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.
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.
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.
El esquema es un contenedor de objetos. Es propiedad de un usuario.
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.