Diferença entre um usuário e um esquema no Oracle?


314

Qual é a diferença entre um usuário e um esquema no Oracle?


17
Eu sempre me perguntei sobre a distinção: - /.
sleske

9
Há um artigo interessante abaixo do qual apaga todas as dúvidas: http://radiofreetooting.blogspot.com/2007/02/user-schema.html
Sandeep Jindal

9
Os esquemas do Oracle são como as pastas Meus documentos no sistema operacional Windows. Um usuário pode conceder permissões a outros usuários para ver as coisas em seu esquema. O esquema do Oracle é essencialmente o espaço de trabalho de um usuário.
Tarzan

3
Também discutido no DBA: dba.stackexchange.com/questions/37012/… .

Respostas:


136

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.


47
Na mesma página: para todos os efeitos, considere o usuário = esquema = usuário = esquema = a mesma coisa.
sengs 22/05/09

4
Mas posso ter dois usuários usando o mesmo esquema?
John John Pichler

6
Se você quer dizer "os objetos em um único esquema podem ser 'pertencentes' a vários usuários", a resposta é Não. Se você quer dizer "os objetos em um único esquema podem ser usados ​​por vários usuários", a resposta é certamente Sim
Mahesh

95

Acredito que o problema é que a Oracle usa o termo esquema ligeiramente diferente do que geralmente significa.

  1. Esquema do Oracle (conforme explicado na resposta de Nebakanezer): basicamente o conjunto de todas as tabelas e outros objetos pertencentes a uma conta de usuário, equivalente aproximadamente a uma conta de usuário
  2. Esquema em geral: o conjunto de todas as tabelas, sprocs etc. que compõem o banco de dados para um determinado sistema / aplicativo (como em "Os desenvolvedores devem discutir com os DBAs sobre o esquema para nosso novo aplicativo").

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


@djangofan Afaik esta pergunta é sobre Oracle, e não sobre MS SQL.
peterh - Restabelece Monica

62

De WikiAnswers :

  • Um esquema é uma coleção de objetos de banco de dados, incluindo estruturas lógicas, como tabelas, visualizações, sequências, procedimentos armazenados, sinônimos, índices, clusters e links de banco de dados.
  • Um usuário possui um esquema.
  • Um usuário e um esquema têm o mesmo nome.
  • O comando CREATE USER cria um usuário. Ele também cria automaticamente um esquema para esse usuário.
  • O comando CREATE SCHEMA não cria um "esquema", como implica, apenas permite criar várias tabelas e visualizações e executar várias concessões em seu próprio esquema em uma única transação.
  • Para todos os efeitos, você pode considerar um usuário um esquema e um esquema para ser um usuário.

Além disso, um usuário pode acessar objetos em esquemas diferentes dos seus, se tiver permissão para fazê-lo.


3
bom ponto re CREATE SCHEMA - um nome mal escolhido para o comando que eu pensaria!
911 Jeffrey Kemp

4
"O comando CREATE SCHEMA não cria um" esquema "como implica". Eu acho que 99% da confusão vem disso. E esse fragmento de frase esclarece muito bem. Obrigado.
usar o seguinte código


Eu acho que essa é a melhor resposta.
hagrawal

50

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


2
descrição elegante, mas por que você usou "foo" para o usuário e o esquema ?! Eles têm que ser iguais?
precisa saber é o seguinte

No Oracle, USER é o nome da conta, SCHEMA é o conjunto de objetos pertencentes a esse usuário. Mesmo assim, o Oracle cria o objeto SCHEMA como parte da instrução CREATE USER e o SCHEMA tem o mesmo nome que o USER, mas eles observam a mesma coisa. Obviamente, a confusão decorre em parte do fato de haver uma correspondência individual entre USER e SCHEMA, e o esquema de um usuário compartilhar seu nome.
Mahesh

17

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 Abordagem

Este método usa o CURRENT_SCHEMAatributo 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.


1
Observe que o uso de funções pode não resolver problemas de permissão para código PL / SQL. As concessões de objetos para funções não são propagadas de maneira intuitiva quando os procedimentos armazenados são compilados. No entanto, votei positivamente nesta resposta porque essa abordagem é realmente ótima, mas é pouco conhecida e raramente usada até onde sei.
Andrew Wolfe

15

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


1
Na verdade, a confusão é criada quando as pessoas chamam - User is Schema. Como usuário, pode não ser o esquema, como você explicou. Um usuário pode simplesmente ser um usuário acessando algum outro esquema do usuário.
amigos estão dizendo

3

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.


1

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.


1

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


0

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.


0

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.


0

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.

Veja aqui detalhes


0

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.


-1

Esquema é um contêiner de objetos. É de propriedade de um usuário.


1
Isso implica que um usuário pode possuir vários esquemas. Não acredito que seja possível (no Oracle); embora o usuário Apossa ter direitos totais de administrador sobre o esquema B, o último sempre será de propriedade do usuário B, mesmo que ninguém nunca faça login com esse nome de usuário.

-1

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.


Esta é realmente uma distinção útil - usuários com CRIAR privs como distintos daqueles sem CRIAR privs
Andrew Wolfe
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.