Eu estava olhando information_schema.role_table_grants
quando vi public
na grantee
coluna, aí já verifiquei information_schema.enabled_roles
mas isso role_name
não existe.
=> Quem ou qual é o public
papel?
Eu estava olhando information_schema.role_table_grants
quando vi public
na grantee
coluna, aí já verifiquei information_schema.enabled_roles
mas isso role_name
não existe.
=> Quem ou qual é o public
papel?
É necessário reiniciar o SQL Server depois DBCC SHRINKFILE
ou tempdb.mdf
existe algum outro método para reduzir o tamanho tempdb.mdf
sem reiniciar o SQL Server?
Por favor, ajude, pois preciso disso para um servidor de produção e espero fazer a redução sem tempo de inatividade.
Me deparei com esse problema recentemente e não consegui encontrar nenhuma discussão sobre ele online.
A consulta abaixo
DECLARE @S VARCHAR(1) = '';
WITH T
AS (SELECT name + @S AS name2,
*
FROM master..spt_values)
SELECT *
FROM T T1
INNER JOIN T T2
ON T1.name2 = T2.name2;
Sempre obtém um plano de loops aninhados
A tentativa de forçar o problema com INNER HASH JOIN
ou INNER MERGE JOIN
dicas produz o seguinte erro.
O processador de consulta não pôde produzir um plano de consulta devido às dicas definidas nesta consulta. Reenvie a consulta sem especificar nenhuma dica e sem usar SET FORCEPLAN.
Encontrei uma solução alternativa que permite o uso de junções de hash ou mesclagem - envolvendo a variável em um agregado. O plano gerado tem um custo significativamente menor (19,2025 vs 0,261987)
DECLARE @S2 VARCHAR(1) = '';
WITH T
AS (SELECT name + (SELECT MAX(@S2)) AS name2,
*
FROM spt_values)
SELECT *
FROM T T1
INNER JOIN T T2
ON T1.name2 = T2.name2;
Qual é a razão para este comportamento? e existe uma solução alternativa melhor do que a que encontrei? (que talvez não exija as ramificações extras do plano de execução)
Isso está relacionado a esta pergunta: Unir várias tabelas resulta em linhas duplicadas
Tenho duas tabelas que estou juntando. Eles compartilham uma chave. A tabela de pessoas tem um nome por chave primária, mas a tabela de email tem vários emails por personId. Quero mostrar apenas o primeiro e-mail por pessoa. Atualmente, recebo várias linhas por pessoa porque eles têm vários e-mails. Estou executando o SQL Server 2005.
EDIT: Este é o T-SQL. O primeiro email é literalmente a primeira linha de email por pessoa.
Edit 2: Primeiro e-mail, como vejo, seria a primeira linha de e-mail que aparece na junção à medida que o SQL funciona na consulta. Não importa qual e-mail aparece. Só que não aparece mais de um e-mail. Espero que isso deixe mais claro.
Table1: Person
Table2: Email
Select Person.PersonName, Email.Email
From person
left join on Person.ID=Email.PersonId;
Ouvi dizer (tenho certeza) que o Developer Edition é gratuito e para baixá-lo não é necessário registro. Mas quando comecei a procurá-lo hoje não consegui encontrar onde consegui-lo. Meu entendimento está certo ou errado? Desculpe, não encontrei uma pergunta semelhante aqui. Alguma ideia?
Quando olho para dentro sys.sql_logins
, vejo uma coluna chamada is_policy_checked
. Posso confiar que minha política de senha foi verificada para todos os logins onde está o valor desta coluna 1
?
A seguir está uma lista de comandos que parecem funcionar para criar um novo usuário (login) e conceder acesso somente leitura para uma tabela especificada no PostgreSQL.
Vamos supor que esses comandos sejam executados no login com privilégios suficientes (ou seja postgres
, login na instalação padrão).
CREATE ROLE user_name NOSUPERUSER NOCREATEDB
NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity';
Agora eu quero conceder select
na tabela tab_abc
no banco de dados db_xyz
, então aqui vai (o banco de dados db_xyz
é selecionado como atual via PgAdmin ou algo parecido):
grant select on tab_abc to user_name;
A questão é: isso é suficiente ou deveria haver mais concessões (banco de dados connect
, usage
talvez)?
Esses comandos parecem funcionar para mim, mas minha instalação padrão tem configurações de segurança padrão. Quais concessões adicionais devo adicionar se o administrador do servidor configurou uma segurança mais forte?
Parece que não preciso conceder connect
nem usage
- isso está implícito ao conceder select
? É sempre assim?
Eu quero criar este tipo de estrutura em redis: (são basicamente dados json)
{
"id": "0001",
"name":"widget ABC",
"model": "model123",
"service":"standard",
"admin_password": 82616416,
"r1":
{
"extid":"50000",
"password":"test123",
},
"r2":
{
"ext":"30000",
"password":"test123",
},
}
O que tentei até agora:
Eu tentei criar um hash sem os hashes "sub", apenas para ter certeza de que tenho o básico. Aqui está o que eu comecei com o redis-cli:
HMSET widget:1 id 0001 name 'widget ABC' model 'model123' service standard admin_password 82616416
HMSET widget:2 id 0002 name 'widget ABC' model 'model123' service standard admin_password 12341234
Isso parece funcionar. Posso ver que tenho 2 "registros" de dados de widgets em uma coleção de widgets.
Mas minha tentativa de criar um registro com os dados r1 falha.
Isto é o que eu tentei:
HMSET widget:3 id 0002 name 'widget ABC' model 'model123' service standard admin_password 12341234 r1{extid 50000}
Isso cria uma chave de hash "r1{extid" com um valor de hash de "50000}"
Qualquer sugestão seria apreciada. Acho que meu problema é minha linguagem. Eu simplesmente não sei o suficiente sobre a sintaxe redis para saber quais palavras usar em minha pesquisa no google.
Talvez eu só tenha que "achatar" os dados assim:
HMSET widget:3 id 0002 name 'widget ABC' model 'model123' service standard admin_password 12341234 r1_extid 50000 r1_password test123 r2_extid 30000 r2_password test123
Obrigado.
Estou escrevendo um programa que exige que eu atribua todas as permissões e tudo no código. Eu fiquei preso nesta parte:
Eu só quero fazer o equivalente a clicar na pequena caixa em "Map" para o banco de dados msdb e atribuir esse usuário à função SqlAgentUser. Eu preciso de um usuário para poder adicionar/editar trabalhos do SQL Server Agent. Posso obter as configurações corretas usando o SSMS, mas não consigo descobrir como fazer isso em SQL bruto.
Eu olhei ALTER LOGIN mas não estou vendo nada que faça o que eu preciso. Eu suspeito que eu simplesmente não sei os termos corretos para o Google. Não costumo fazer esse tipo de coisa.
Qualquer ajuda é muito apreciada!
Digamos que eu tenha duas consultas, executadas em duas sessões separadas no SSMS:
Primeira sessão:
UPDATE Person
SET Name='Jonny', Surname='Cage'
WHERE Id=42
Segunda sessão:
SELECT Name, Surname
FROM Person WITH(NOLOCK)
WHERE Id > 30
É possível que a SELECT
instrução possa ler uma linha semi-atualizada, por exemplo, uma com Name = 'Jonny'
e Surname = 'Goody'
?
As consultas são executadas quase simultaneamente em sessões separadas.