AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 134105
Accepted
Kenneth Fisher
Kenneth Fisher
Asked: 2016-04-02 08:14:17 +0800 CST2016-04-02 08:14:17 +0800 CST 2016-04-02 08:14:17 +0800 CST

Como um usuário DEFAULT_SCHEMA é definido para algo diferente de "dbo"

  • 772

Uma das configurações para um usuário do SQL Server é o arquivo DEFAULT_SCHEMA. Isso é frequente, dbomas nem sempre. Sei que você pode alterar a configuração usando este código:

ALTER USER [UserName] WITH DEFAULT_SCHEMA = [SchemaName]

Pelo que posso dizer, sempre que crio um USERe não especifico DEFAULT_SCHEMAque ele usa dbo. Mas ainda estou descobrindo USERSque tem um esquema padrão diferente.

Se bem me lembro quando você tem uma instância que é atualizada do SQL 2000, o esquema padrão é o esquema correspondente ao nome do usuário. Eu estou supondo que é de onde vem a maioria, se não tudo, do que estou vendo.

Existem outras maneiras de criar um USERsem especificar DEFAULT_SCHEMAe fazer com que seja criado com algo diferente de dbo?

Nota: Isso é para versões do SQL Server 2005 e superiores.

sql-server schema
  • 2 2 respostas
  • 4953 Views

2 respostas

  • Voted
  1. Best Answer
    Solomon Rutzky
    2016-04-02T09:28:38+08:002016-04-02T09:28:38+08:00

    Uma maneira de isso acontecer é ter um Login que tenha a CONTROL SERVERpermissão de nível de servidor (portanto, não precisa de uma permissão real USERpara acessar um banco de dados), mas não na sysadminfunção de servidor fixa (pois há um esquema padrão implícito de dbo) criar um objeto sem especificar explicitamente o esquema para colocá-lo.

    De acordo com a página do MSDN para CREATE SCHEMA :

    Esquema Implícito e Criação de Usuário

    Em alguns casos, um usuário pode usar um banco de dados sem ter uma conta de usuário de banco de dados (uma entidade de banco de dados no banco de dados). Isso pode acontecer nas seguintes situações:

    • Um login tem privilégios CONTROL SERVER .
    • Um usuário do Windows não tem uma conta de usuário de banco de dados individual (uma entidade de banco de dados no banco de dados), mas acessa um banco de dados como membro de um grupo do Windows que possui uma conta de usuário de banco de dados (uma entidade de banco de dados para o grupo do Windows).

    Quando um usuário sem uma conta de usuário de banco de dados cria um objeto sem especificar um esquema existente, um principal de banco de dados e um esquema padrão serão criados automaticamente no banco de dados para esse usuário. A entidade de banco de dados e o esquema criados terão o mesmo nome que o usuário usou ao se conectar ao SQL Server (o nome de login de autenticação do SQL Server ou o nome de usuário do Windows).

    Portanto, estou falando do primeiro caso observado acima, e a resposta de @Max é sobre esse segundo caso.

    O seguinte é um exemplo para o primeiro caso (observe que o exemplo a seguir usa tempdb, pois todas as instâncias têm isso, mas testei em um não tempdbbanco de dados para ter certeza). Para ver um exemplo do segundo caso, consulte a resposta de @Max (não há necessidade de duplicar isso aqui).

    USE [master];
    
    CREATE LOGIN [DefaultSchemaTest] WITH PASSWORD = 'DefaultSchemaTest';
    GRANT CONTROL SERVER TO [DefaultSchemaTest];
    GO
    
    EXECUTE AS LOGIN = 'DefaultSchemaTest';
    
    USE [tempdb];
    SELECT * FROM sys.database_principals WHERE [type] <> 'R';
    SELECT * FROM sys.schemas WHERE [name] NOT LIKE N'db[_]%';
    
    CREATE TABLE MySchemaTest (Col1 INT);
    
    SELECT * FROM sys.database_principals WHERE [type] <> 'R';
    SELECT * FROM sys.schemas WHERE [name] NOT LIKE N'db[_]%';
    
    USE [master];
    REVERT;
    
    • 3
  2. Hannah Vernon
    2016-04-02T09:12:05+08:002016-04-02T09:12:05+08:00

    O esquema de um usuário que é membro de um Grupo do Windows que tem acesso ao banco de dados do SQL Server por meio desse Grupo do Windows se tornará o nome do usuário automaticamente.

    Para testar isso, acabei de criar um grupo em minha máquina local chamado "TestGroup". Adicionei um usuário do Windows "TestUser" a esse grupo. Em seguida, fiz o seguinte na minha instância local:

    CREATE DATABASE tl;
    GO
    USE tl;
    CREATE LOGIN [MACHINE\TestGroup] FROM WINDOWS;
    CREATE USER [MACHINE\TestGroup]  FOR LOGIN [MACHINE\TestGroup];
    GRANT CONTROL TO [MACHINE\TestGroup]
    

    Em seguida, iniciei o SSMS como "TestUser" e loguei na instância local. Então eu corri o seguinte:

    USE tl;
    
    CREATE TABLE SomeTable --note I did NOT specify the schema here!
    (
        SomeTableID INT NOT NULL
    );
    
    SELECT SchemaName = s.name
        , TableName = t.name
    FROM sys.tables t
        INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
    

    Os resultados:

    +------------------+------------+
    |   Schema Name    | Table Name |
    +------------------+------------+
    |                  |            |
    | MACHINE\TestUser | SomeTable  |
    +------------------+------------+
    
    • 2

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve