Qual é a diferença entre um usuário e um esquema no Oracle?
Qual é a diferença entre um usuário e um esquema no Oracle?
Respostas:
De Ask Tom
Você deve considerar um esquema como a conta do usuário e a coleção de todos os objetos nele como um esquema para todas as intenções e propósitos.
O SCOTT é um esquema que inclui as tabelas EMP, DEPT e BONUS com várias concessões e outras coisas.
SYS é um esquema que inclui toneladas de tabelas, visualizações, concessões, etc etc etc.
SYSTEM é um esquema .....
Tecnicamente - Um esquema é o conjunto de metadados (dicionário de dados) usado pelo banco de dados, normalmente gerado usando DDL. Um esquema define atributos do banco de dados, como tabelas, colunas e propriedades. Um esquema de banco de dados é uma descrição dos dados em um banco de dados.
Acredito que o problema é que a Oracle usa o termo esquema ligeiramente diferente do que geralmente significa.
O esquema no sentido 2. é semelhante, mas não o mesmo que o esquema no sentido 1. Por exemplo, para um aplicativo que usa várias contas de banco de dados, um esquema no sentido 2 pode consistir em vários esquemas do Oracle :-).
Além disso, o esquema também pode significar várias outras coisas não relacionadas em outros contextos (por exemplo, na matemática).
O Oracle deveria ter usado um termo como "userarea" ou "accountobjects", em vez de sobrecarregar "schema" ...
De WikiAnswers :
Além disso, um usuário pode acessar objetos em esquemas diferentes dos seus, se tiver permissão para fazê-lo.
Pense em um usuário como você normalmente (nome de usuário / senha com acesso para efetuar login e acessar alguns objetos no sistema) e um esquema como a versão do banco de dados do diretório inicial de um usuário. O usuário "foo" geralmente cria itens no esquema "foo", por exemplo, se o usuário "foo" cria ou se refere à tabela "bar", o Oracle assume que o usuário significa "foo.bar".
Essa resposta não define a diferença entre um proprietário e um esquema, mas acho que isso aumenta a discussão.
No meu pequeno mundo de pensamento:
Eu lutei com a idéia de criar um número N de usuários onde desejo que cada um desses usuários "consuma" (ou seja, use) um único esquema.
Tim em oracle-base.com mostra como fazer isso (tenha N número de usuários e cada um desses usuários será "redirecionado" para um único esquema.
Ele tem uma segunda abordagem de "sinônimo" (não listada aqui). Estou apenas citando a versão CURRENT_SCHEMA (uma de suas abordagens) aqui:
CURRENT_SCHEMA
AbordagemEste método usa o
CURRENT_SCHEMA
atributo session para apontar automaticamente os usuários do aplicativo para o esquema correto.Primeiro, criamos o proprietário do esquema e um usuário do aplicativo.
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;
Observe que o usuário do aplicativo pode se conectar, mas não possui cotas ou privilégios de espaço de tabela para criar objetos.
Em seguida, criamos algumas funções para permitir acesso de leitura e gravação e somente leitura.
CREATE ROLE schema_rw_role; CREATE ROLE schema_ro_role;
Queremos conceder ao usuário do aplicativo acesso de leitura e gravação aos objetos do esquema, portanto, concedemos a função relevante.
GRANT schema_rw_role TO app_user;
Precisamos garantir que o usuário do aplicativo tenha seu esquema padrão apontando para o proprietário do esquema; portanto, criamos um gatilho AFTER LOGON para fazer isso por nós.
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; /
Agora estamos prontos para criar um objeto no proprietário do 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 como os privilégios são concedidos às funções relevantes. Sem isso, os objetos não ficariam visíveis para o usuário do aplicativo. Agora temos um proprietário de esquema e um usuário de aplicativo em funcionamento.
SQL> CONN app_user/password Connected. SQL> DESC test_tab Name Null? Type ----------------------------------------------------- -------- ------------------------------------ ID NOT NULL NUMBER DESCRIPTION VARCHAR2(50) SQL>
Esse método é ideal quando o usuário do aplicativo é simplesmente um ponto de entrada alternativo para o esquema principal, sem a necessidade de objetos próprios.
É muito simples.
If USER has OBJECTS
then call it SCHEMA
else
call it USER
end if;
Um usuário pode ter acesso a objetos de esquema pertencentes a diferentes usuários.
Esquema é um encapsulamento de DB.objects sobre uma ideia / domínio de interesse e de propriedade de UM usuário. Em seguida, ele será compartilhado por outros usuários / aplicativos com funções suprimidas. Portanto, os usuários não precisam possuir um esquema, mas um esquema precisa ter um proprietário.
Uma conta de usuário é como parentes que possuem uma chave da sua casa, mas não possuem nada, ou seja, uma conta de usuário não possui nenhum objeto de banco de dados ... nenhum dicionário de dados ...
Enquanto um esquema é um encapsulamento de objetos de banco de dados. É como o proprietário da casa que possui tudo em sua casa e uma conta de usuário poderá acessar os bens na casa somente quando o proprietário, ou seja, o esquema conceder as subvenções necessárias.
- USUÁRIO E ESQUEMA
As duas palavras usuário e esquema são intercambiáveis, é por isso que a maioria das pessoas fica confusa com essas palavras abaixo. Expliquei a diferença entre elas
- Usuário usuário é uma conta para conectar o banco de dados (servidor). podemos criar usuário usando a senha CREATE USER user_name IDENTIFIED BY.
--Esquema
Na verdade, o Oracle Database contém estrutura lógica e física para processar os dados. O esquema também estrutura lógica para processar os dados no banco de dados (componente de memória). É criado automaticamente pelo oracle quando o usuário é criado. Contém todos os objetos criados pelo usuário associado a esse esquema. Por exemplo, se eu criei um usuário com o nome santhosh, o oracle cria um esquema chamado santhosh, o oracle armazena todos os objetos criados pelo usuário santhosh em santhosh esquema.
Podemos criar esquema pela instrução CREATE SCHEMA, mas o Oracle cria automaticamente um usuário para esse esquema.
Podemos descartar o esquema usando a instrução DROP SCHEMA schama_name RESTRICT, mas não é possível excluir o esquema que contém objetos, portanto, para descartar o esquema, ele deve estar vazio. Aqui a palavra restrita especifica forçosamente esse esquema sem objetos.
Se tentarmos eliminar um usuário que contém objetos em seu esquema, devemos especificar a palavra CASCADE porque o oracle não permite que você exclua objetos que contenham usuário. DROP USER user_name CASCADE, de modo que o oracle exclua os objetos no esquema e, em seguida, exclua o usuário automaticamente. Os objetos referenciados a esse esquema de outros esquemas, como visualizações e sinônimos privados, passam para o estado inválido.
Espero que agora você tenha a diferença entre eles. Se tiver alguma dúvida sobre esse tópico, não hesite em perguntar.
Obrigado.
Os usuários de um esquema e de banco de dados são os mesmos, mas se o esquema possuir objetos de banco de dados e eles puderem fazer qualquer coisa que seu objeto, mas o usuário acessar os objetos, eles não poderão FAZER nenhuma operação DDL até que o usuário do esquema conceda os privilégios adequados.
Baseado no meu pouco conhecimento sobre Oracle ... um USUÁRIO e um ESQUEMA são um pouco semelhantes. Mas há também uma grande diferença. Um USUÁRIO pode ser chamado de ESQUEMA se o "USUÁRIO" possuir qualquer objeto, caso contrário ... ele permanecerá apenas um "USUÁRIO". Uma vez que o USUÁRIO possua pelo menos um objeto, em virtude de todas as suas definições acima ... agora o USUÁRIO poderá ser chamado de ESQUEMA.
Usuário: acesso ao recurso do banco de dados. Como uma chave para entrar em uma casa.
Esquema: Coleta de informações sobre objetos de banco de dados. Como o Índice em seu livro, que contém as informações breves sobre o capítulo.
Para a maioria das pessoas que estão mais familiarizadas com o MariaDB ou MySQL, isso parece pouco confuso, porque no MariaDB ou MySQL eles têm esquemas diferentes (que incluem tabelas diferentes, exibição, blocos PLSQL e objetos de banco de dados etc.) e USERS são as contas que podem acessar esses esquema. Portanto, nenhum usuário específico pode pertencer a qualquer esquema específico. A permissão deve ser dada a esse esquema, para que o usuário possa acessá-lo. Os usuários e o esquema são separados em bancos de dados como MySQL e MariaDB.
No esquema Oracle, os usuários são quase tratados da mesma forma. Para trabalhar com esse esquema, é necessário ter a permissão, onde você sentirá que o nome do esquema não passa de um nome de usuário. As permissões podem ser concedidas através de esquemas para acessar diferentes objetos de banco de dados de diferentes esquemas. No oracle, podemos dizer que um usuário possui um esquema porque, quando você cria um usuário, cria objetos de banco de dados para ele e vice-versa.
Esquema é um contêiner de objetos. É de propriedade de um usuário.
Bem, li em algum lugar que, se o usuário do seu banco de dados tem privilégios de DDL, é um esquema, caso contrário, é um usuário.