Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila de Administracao de Banco de Dados
Apostila de Administracao de Banco de Dados
simplista, instalar,
um SGBD (Sistema
este conceito, um
responsabilidades:
Pag 0 Pag 1
Header
Do
PFS
database
Pag 2
Pag 3
GAM
SGAM
.....
Pag
8088
.....
Pag
16176
PFS
PFS
.....
Pag
Pag
511232 511233
GAM SGAM
referncia conhecida como ponteiro, que serve para localizar a chave na pgina de dados
da tabela.
Nota: o ndice cluster no utiliza ponteiro.
ndices no SQL Server 2000 so construdos sobre estruturas denominadas
rvores balanceadas (=B-Tree), cujo desenho lembra o esqueleto de uma pirmide. A
idia desse algoritmo fornecer um modelo de pesquisa que agilize o processo de busca,
efetuando um nmero reduzido de leituras nas pginas do ndice para que se obtenha a
localizao da chave pesquisada.
Fazendo uma analogia com um livro, quando procuramos por determinada
palavra num livro, localizamos a(s) pgina(s) desejada(s) atravs de uma busca em seu
ndice. Se fossemos ensinar algum como procurar a palavra ADMIN num livro de SQL
Server, provavelmente ensinaramos alguma coisa assim:
1. Localize o ndice remissivo no final do livro;
2. Procure o bloco de palavras que iniciam pela letra A;
3. Efetue uma leitura seqencial nesse bloco at localizar a palavra desejada.
A Figura 2 na pgina seguinte, ilustra um processo de busca envolvendo a
mesma pesquisa anterior numa rvore B-Tree de um ndice no-cluster. O processo tem
incio numa pgina-mestre conhecida como root page, procurando pela maior chave da
pgina cujo valor menor ou igual palavra pesquisada. Em nosso exemplo, a primeira
palavra cujo cdigo alfabtico menor ou igual ADMIN ACESSO, portanto
seguiremos nessa direo at a pgina de nmero 2, localizada num nvel intermedirio
conhecido por non leaf level. A busca finalizada no nvel folha ou leaf level page,
onde encontramos a referncia para a pgina de dados onde se localiza a palavra
ADMIN.
O termo cluster index scan utilizado para especificar varreduras seqenciais nas
pginas de dados de uma tabela que possui ndice cluster. Nesse caso, a pgina
inicial da tabela encontra-se em SysIndexes para IndId=1.
O termo table scan utilizado para especificar varreduras seqenciais nas pginas
de dados heaps. Nesse caso, a pgina inicial da tabela encontra-se em
SystemIndexes.FirstIam para IndId=0.
Pginas de dados de tabelas com ndice cluster so ligadas uma s outras, isto
, no cabealho de cada pgina so encontradas referncias pgina anterior e posterior (=
Next/Previous Page). Para um processo efetuar uma leitura seqencial numa tabela com
ndice cluster conhecida como cluster index scan precisar apenas localizar a pgina
inicial em SysIndexes.Root; as pginas seguintes estaro encadeadas.
J em heaps o processo diferente pelo fato das pginas de dados no possurem
ordenao. Pode-se iniciar um lote de insero numa pgina localizada no meio da tabela,
utilizando espao gerado por uma srie de delees e terminar o processo no fim da
tabela, alocando-se uma nova extend.
Como j vimos, em heaps as pginas no so ligadas uma as outras. Ento, para
varrer as pginas pertencentes a uma heap, o SQL Server utiliza pginas especiais
denominadas pginas IAM que controlam as pginas utilizadas por uma tabela. Portanto,
num processo de leitura de um heap o SQL Server 2000 se norteia pelas pginas IAM.
Criao de um ndice passo a passo
Para criar um ndice na tabela Orders do banco de dados Northwind no
Enterprise Manager, expanda o banco de dados selecionando a opo Tables. Clique com o
boto direito sobre a tabela Orders, selecione
Design Table e na barra de
ferramentas clique em manager Indexes/keys
para que a tela apresentada
na Figura 3 obtenha o foco principal.
utilizado somente 80% da capacidade da pgina para ocupao das linhas do ndice.
O fill factor atua somente no momento da criao ou reestruturao do ndice, no
sendo mantido durante os processos posteriores de atualizao do ndice.
Pad Index:fill factor atua somente no nvel leaf level do ndice. Assinalando essa
opo, o percentual definido em fill factor ser propagado para os nveis
intermedirios da rvore B-Tree.
Create as Clustered: indica que o ndice criado ser do tipo cluster. Lembre-se que
s possvel criar um ndice cluster por tabela.
Do not automatically recompute statistics: as estatsticas de distribuio de dados
pela chave do ndice so essenciais para o otimizador avaliar uma query e, por
default, so atualizadas automaticamente aps um determinado nmero de
modificaes no ndice.
Argumentos:
'table_name' | table_id | 'view_name' | view_id
a tabela ou viso para a qual deseja-se checar informaes de fragmentao. Se
no for especificado, todas as tabelas e vises indexadas (indexed views) no
Estatstica
Pages Scanned
Extents Scanned
Extent Switches
Descrio
Nmero de pginas na tabela ou ndice.
Nmero de extents na tabela ou ndice.
Nmero de vezes que o comando DBCC
move-se de uma extent para outra enquanto
o comando atravessa as pginas da tabela ou
ndice.
Mdia de pginas por extent
Quanto mais prximo de 100% melhor. Um
valor menor do que 100%, significa que
existe fragmentao.
Percentage of out-of-order extents in
scanning the leaf pages of an index. This
number is not relevant to heaps. An out-oforder extent is one for which the extent that
contains the current page for an index is not
physically the next extent after the extent
that contains the previous page for an index.
Mdia de bytes livres na pgina escaneada.
Quanto maior melhor.
Average page density, as a percentage. This
value takes into account row size.
Therefore, the value is a more accurate
indication of how full your pages are. The
larger the percentage, the better.
Observaes:
ndices devem ser criados para agilizar a performance do sistema como um todo,
mas freqentemente nos esquecemos disso. Sub-avaliamos o impacto da criao de
ndices na performance geral do sistema, e aquilo que foi concebido como objetivo
inicial de ganho de performance resulta mais em um ponto de conteno.
Otimizao e Tunning
Com o passar do tempo, as tabelas tendem a adquirir fragmentao os dados
que inicialmente ficavam prximos se tornam espaados (caderninho de agenda).
Funo
Data
Index
Observao: Um objeto nasce, cresce at 8 pginas em extents mista, e passa para extents
exclusiva.
Por padro uma pgina de dados no possui textos ou imagens. Veja a Tabela 1,
existem pginas especiais para esses tipos de dados. O campo destinado a imagem
armazena um ponteiro informando a pgina inicial onde reside o objeto. Esse
mecanismo traz dois benefcios: o primeiro diz respeito otimizao, pois a
separao torna o processo de leitura mais eficiente. O segundo diz respeito ao
tamanho, pois uma estrutura parte permite armazenar imagens at um limite de
2GB (vrias pginas podem ser alocadas para um nico objeto).
O SQL Server permite, atravs da opo text in row, que sejam gravados
imagens ou texto na prpria pgina de dados. Se a maior parte de seus campos
BLOB constantemente acessada e possui tamanho inferior a 8KB, possvel
ganhar performance habilitando essa opo. A linha de comando a seguir ativa a
opo de armazenamento de imagens de at 512 bytes na prpria pgina de dados:
Causas da fragmentao:
Ocorrncia de page splits termo utilizado para designar uma diviso de
pgina de ndice, cluster ou no cluster para acomodar uma insero pontual.
Deleo de registros causando maior espaamento entre os dados.
A recuperao de dados fragmentados requer maior esforo de I/O, portanto
devemos trabalhar no sentido de minimizar este problema.
CR
AA
BC
FA
GC
IA
JC
LA
MC
AB
BD
FB
GD
IB
JD
LB
MD
AC
EA
FC
HA
IC
KA
LC
NA
AD
EB
FD
HB
ID
KB
LD
NB
BA
EC
GA
HC
JA
KC
MA
NC
BB
ED
GB
HD
JB
KD
MB
ND
Page Split
AA
BC
FA
GC
IA
JC
LA
MC
AB
BD
FB
GD
IB
JD
LB
MD
AC
CR
FC
HA
IC
KA
LC
NA
AD
EB
FD
HB
ID
KB
LD
NB
BA
GA
HC
JA
KC
MA
NC
BB
GB
HD
JB
KD
MB
ND
EB
EC
ED
Extents Switches: total de trocas de (pginas que deveriam estar numa mesma
extent esto distribudas em vrias extents). Em condies normais deve possuir
um valor prximo de Extents Scanned;
Avg.Pages per Extent: nmero mdio de pginas por extent; deve ser prximo
de 8.
Scanned Density[Best Count:Actual Count]: densidade das pginas quanto
mais prximo de 100%, melhor. Um valor igual a 75% indica 25% de
fragmentao.
Logical Scan Fragmentation: percentual de fragmentao de pginas, utilizado
somente para ndice cluster.
Avg. Bytes Free per Page: nmero mdio de bytes livres por pgina; quanto
mais prximo de zero melhor;
Avg. Page Density(full): densidade (ou preenchimento) mdio das pginas;
quanto mais prximo de 100% melhor.
Exemplo:
Sp_Configure show advanced options , 1
Reconfigure with OverRide
Sp_configure para confirmar alterao
Tabela
Order details
Orders details
Orders
Orders
Nome
Pk_Order_Details
productID
CustomerID
orderDate
Campos
OrderID, ProductID
productID
CustomerID
OrderDate
Tipo
Primary key
Nom-clustered
Nom-clustered
Nom-cluster
Um detalhe importante que essas estatsticas so calculadas para o primeiro segmento (ou
primeira coluna) dos ndices; portanto, assegure-se de colocar a coluna mais seletiva
sempre como o primeiro segmento de um ndice. Quanto mais seletiva a coluna menor o
custo de I/O.
Nested Loop: o otimizador elege uma tabela, conhecida por Outer Table, que
servir de base para leitura seqencial de registros. A cada registro lido nessa tabela
efetuada uma busca pelo registro correspondente na outra tabela participante do join,
conhecida por Inner Table. Esse mtodo bastante eficiente quando uma das tabelas
possui quantidade pequena de registros, ou quando o join possui filtros que tornam o
resultado pequeno. A tabela com menor nmero de registros ser definida como Outer
Table. A Inner Table dever possuir um ndice formado pela(s) coluna(s) que unem as
duas tabelas. No exemplo, a tabela Orders representa a Outer Table e a tabela Order
Details assume o papel de Inner Table.
Merge Join: se as duas tabelas possurem ndices sobre as colunas mencionadas no
join e o nmero de registros selecionados em ambas for elevado, esse modelo ser
escolhido. O otimizador recupera uma coluna em cada lista, efetuando a comparao.
Em caso de igualdade, retorna as colunas selecionadas. Caso contrrio, a coluna de
menor valor descartada e o prximo valor da lista ser comparado. O processo se
repete at que todas as linhas tenham sido processadas.
Hash Join: se no existirem ndices adequados para a igualdade definida no join,
esse mtodo ser utilizado. Um algoritmo de hash utilizado para agilizar a
combinao. Unir duas tabelas sem ndices apropriados ou com baixa seletividade um
fator de queda de performance, portanto investigue esse tipo de ocorrncia.
Observao: a escolha do tipo de JOIN executado na query atribuio do
otimizador, que foi desenhado para esse fim. Apesar de possvel, a utilizao de hints
para forar a execuo da query por determinado tipo de join desaconselhvel. Se
fizermos isso, a query ser executada sempre da mesma maneira. Uma query executa
por Nested Loop pode ser executada via Merge Join em outro momento, dependendo do
volume de dados e dos ndices existentes.
Como ilustrao, a query a seguir fora o plano de execuo para Hash Join:
SELECT *
FROM [Northwind].[dbo].[Orders] o INNER JOIN
[Northwind].[dbo].[Order Details] od
ON o.OrderID = od.OrderID
OPTION (HASH JOIN)
Icon
Physical operator
Assert
Bookmark Lookup
Collapse
Compute Scalar
Concatenation
Constant Scan
Deleted Scan
Filter (clsColumn)
Hash Match
Index Delete
Index Insert
Index Scan
Index Seek
Index Spool
Index Update
Inserted Scan
Merge Join
Nested Loops
Parallelism
Remote Delete
Remote Insert
Remote Query
Remote Scan
Remote Update
Sequence
Sort
Stream Aggregate
Table Delete
Table Insert
Table Scan
Table Spool
Table Update
Top
Assert: utilizado para verificar condies (integridade referencial, check constraint, entre
outras) agindo como uma espcie de filtro para os registros envolvidos na operao.
Compute Scalar: utilizado para retornar sada envolvendo valores calculados (Compute
Columns, funes, etc).
Index Spool: indica que foi necessrio a criao de tabela temporria no database
tempdb para rodar a query. Esse passo muitas vezes pode ser evitado reescrevendo-se o join.
Sort: presente quando a query utiliza order by ou quando o input precisa ser ordenado
para resoluo do join. No segundo caso, a perda de performance pode ser evitada criando-se
um ndice adequado.
Stream Aggregate: aparece quando utilizamos clusulas que agregam valores, como
avg, distinct, sum, Max, min ou count.
Substitua:
WHERE SUBSTRING(ShipName,1,1) = M
Por:
WHERE ShipName LIKE M%
Execute o SELECT:
SELECT Month_OrderDate FROM [Northwind].[dbo].[Orders]
WHERE Month_OrderDate = 7
A alterao desse parmetro deve ser efetuado com bastante cautela, pois correse o risco da query abortada estar inserida em uma transao extensa e ter adquirido muitos
locks. Como sugesto, avalie a opo query governor. Implante limites que voc considera
suficientes para seu ambiente (com boa margem de segurana) e v reduzindo
gradativamente, at chegar ao ponto ideal.
lock ou bulk update lock) selecionado automaticamente pelo SQL Server a menos que
voc utilize um hint, o que no aconselhvel.
O SQL Server trabalha com escalonamento de locks, permitindo que um
bloqueio de registro seja promovido para um bloqueio de pgina ou de tabela. O
escalonamento possibilita a economia de recursos (um lock consome 64 bytes de memria),
pois os bloqueios de nvel menor so liberados.
Como ilustrao, imagine uma operao de update envolvendo as 1000 linhas de
uma tabela. O que seria mais eficiente: 1000 locks de registro ou um lock de tabela? A
segunda opo, j que todas as linhas sero atualizadas.
O problema relacionado a bloqueios advm de seu tempo de durao. Bloqueios
curtos so eficientes, bloqueios longos um transtorno. Entre os fatores que aumentam a
durao de bloqueios esto s transaes longas, ausncia, excesso ou ineficincia de
ndices, bases de dados no normalizadas, utilizao indiscriminada de cursores, entre
outros. Nesses ambientes, as mensagens de erro envolvendo query timeout (#1222) ou de
deadlocks (#1205) tendem a ocorrer com maior freqncia.
Query timeout acontece quando, ao executar um comando de manipulao de
dados, aguardamos sua concluso por tempo superior a um limite previamente estabelecido.
Esse limite pode ser definido no objeto de conexo da aplicao front-end ou setado
diretamente no batch ou stored procedure atravs do comando Set Lock_Timeout.
Deadlock acontecem quando dois processos ficam aguardando pela liberao dos
mesmos recursos. O SQL Server 2000 resolve essa situao finalizando a conexo que
consumir menos recursos. Nas Listagems 3 e 4 seguem exemplos para gerar dois tipos de
deadlock: cclico e de converso.
ativos no servidor de banco de dados. Muitas vezes todo o problema pode ser resolvido
com a adio de um ndice ou filtro num comando update.
Mas como saber exatamente onde est o problema?
O SQL Server possui um utilitrio chamado Profiler, indicado para rastreamento
dos eventos processados numa base SQL Server 2000. o Profiler uma ferramenta de
diagnstico, ou seja, ela nos fornece material para anlise. Vale destacar que ela no se
prope por si s a efetuar correes ou qualquer espcie de tuning.
Criando uma trace passo-a-passo
O Profiler uma ferramenta para criar traces. Uma trace como uma fotografia
dos comandos executados pelo SQL Server 2000 em um determinado intervalo de tempo.
Para criar uma trace, selecione Profiler no sub-menu do SQL Server (ver Figura 1). Na tela
principal do Profiler, selecione File | New | Trace (ver Figura 2).
Save to table: grava o resultado da trace numa tabela. mais fcil de depurar, ps
podemos colocar filtros ou ordenar da maneira que acharmos mais interessante.
Set maximum rows (in thousands): limira o nmero de linhas na tabela originada
pela trace.
Enable trace stop time: estabelece prazo limite para trmino da trace.
T1
Nome do Template
SQLProfileStandard
SQLProfileTSQL
SQLProfileTSQL_Duration
SQLProfileTSQL_Group
SQLProfileTSQL_Replay
SQLProfile_SPs
SQLProfileTuning
Guia events
A guia Events (ver Figura 5), apresenta uma relao de todas as classes de
eventos que podem ser monitorados num servidor de banco de dados SQL Server 2000.
Nesse contexto, classes so agrupamentos de eventos que possuem uma caracterstica em
comum: Temos uma para controlar execuo de procedures, outra para gerenciamento de
locks, etc. o template SQLProfilerStandard, por exemplo, seleciona automaticamente
alguns eventos vistos na Tabela 2.
T2
Classe
Evento
Security Audit
Audit Logon
Audit Logoff
Existent
Connections
RPC:Completed
SQL:Batch
Completed
Sessions
Stored
Procedures
TSQL
Guia Filters
Finalmente a definio da trace na guia Filters (veja Figura 7), utilizada para
refino da trace. A aplicao Profiler para mostrar na tela os comandos processados pelo
servidor SQL Server, responsvel por uma srie de comandos que so tambm
processados pelo engine do banco. Para evitar que esses comandos apaream na trace,
ligamos o filtro ApplicationName Not Like Profiler.
Iniciar uma nova trace, efetuando toda a parametrizao novamente: Para isto clique
em
Trocar o Template SQLProfilerStandard: Para isto clique em
Carregar uma trace previamente gravada em arquivo .TRC: Para isto clique no
cone
Carregar uma trace gravada em uma tabela no banco: Para isto clique em
Acessar a tela de configuraes gerais da trace: Para isto utilize o cone de
propriedades
Procurar por uma determinada string na trace que voc acabou de gerar: Para isto
utilize o binculo
Agora um teste prtico. Com o Profiler ativo, abra uma sesso no Query
Analyzer e execute a seqncia de comandos a seguir:
Use Northwind
Go
Create procedure stp_Mostrar_Pedido (@OrderId int0
As
select O.OrderId, O.CustomerId, O.EmployeeId, d.ProductId, d.UnitPrice, d.Quantity
from Orders O inner join [Order Details] d
on O.OrderId = d.OrderId
Where O.OrderId = @OrderId
Return
go
Agora um teste prtico. Com o Profiler ativo, abra uma sesso no Query
Analyzer e execute a seqncia de comandos a seguir:
Gravando a Trace
Para gravar a trace, siga at a opo File da barra de menu e escolha Save AS
(ver Figura 10).
Trace Template: utilize para gerar um template (arquivo com extenso .tdf, de
Template Data File);
Trace File: salva um arquivo em disco com extenso .trc com o resultado da trace;
Trace Table: armazena o resultado da trace em uma tabela.
SQL Script: gera um arquivo texto (extenso .sql) com o lote de comandos T-SQL
necessrios para criar e executar a trace.
Concluso
Quando o assunto tuning, o Profiler uma ferramenta indispensvel. Na
prxima aula continuaremos esse assunto e nos aprofundaremos nos principais eventos que
devem ser analisados, tendo em vista a otimizao de processos. At l!
Profiler (continuao)
Criando uma trace para anlise de performance de um servidor SQL Server
Figura 23: Filtrando comandos T-SQL cujo tempo de durao for superior a 2000
milisegundos.
use Northwind
go
create proc stp_teste
as
select top1 * from orders
select top 1 * from [order details]
waitfor delay '00:00:03'
select top 1 * from customers
go
exec stp_teste
go
select count(*) from [order details]
go
select top 10 * from orders
go
Listagem 1
Figura 25: Eventos que devem ser selecionados para visualizar a execuo dos comandos
T-SQL dentro das sps.
SP:Completed ir gerar uma linha contendo a chamada para a procedure.
SP:StmtCompleted ir gerar uma linha para cada comando T-SQL executado dentro da sp
Figura 27: Ligando o filtro ObjectId para filtrar os comandos T-SQL executados na
procedure stp_teste.
5) Rode a trace <RUN>
6) Execute a procedure stp_teste. Veja o resultado na tela profiler (Figura 28).
4) Evitando CacheMiss
Quando acionamos uma sp, seu plano de execuo fica em memria. Nesse plano
so armazenadas instrues de como a query dever ser executada: que ndice utilizar, o
tipo de join selecionado, etc. antes de criar um plano de execuo novo, o otimizador faz
uma busca na rea de cach destinada a procedures procurando por um plano pr-existente.
Se a busca for bem sucedida, o ser aproveitado e a sp ser executada de acordo com ele.
Existem algumas situaes onde o otimizador obrigado a fazer vrias tentativas
at encontrar o cdigo pr-compilado. Cada uma dessas tentativas mal sucedidas dispara
um evento conhecido por SP:CacheMiss, que pode ser evitado seguindo-se as dicas abaixo:
No utilize o prefixo sp_ para nomear suas sps. Quando o otimizador encontra
uma procedure com o prefixo sp, sua execuo desencadeada no banco de dados
mster. Como a sp no existe nesse banco de dados, seu plano de execuo no
encontrado na primeira tentativa, disparando um evento SP:cacheMiss. O processo
de execuo prossegue procurando a sp no banco de dados local, onde o cdigo
compilado encontrado e a sp executada.
Execute stored procedure qualificando seu dono (owner). Lembre-se que voc pode
possuir objetos com o mesmo nome, mas com owner diferentes. Troque exec
stp_teste por exec dbo.stp_teste.
St_trace_setstatus 1,2
<1>: id da trace, levantado no item -2
<2>: parmetro para encerrar a trace.
PS: necessrio stopar antes.
Nota: Funes internas no SQL Server 2000 que possuem o prefixo fn_ precisam ser
chamadas com a adio de :: (duas vezes o sinal de pontuao dois pontos).
C:\Teste\Teste_data.MDF
Db_Teste
C:\Teste\Teste_log.LDF
alm dos arquivos .MDF e .LDF, possvel criar outros arquivos para
armazenamento de dados. Estes arquivos secundrios possuem extenso .NDF, de
Secondary Data Files e podem ser criados no mesmo filegroup do arquivo .MDF
(PRIMARY) ou em outro filegroup. A deciso de utilizar o mesmo filegroup ou criar um
novo depende da finalidade do arquivo secundrio. A seguir esto listados algumas
situaes cuja resoluo baseia-se na implementao de filegroups:
O arquivo de dados principal atingiu um tamanho que extrapola a capacidade da
unidade de fita DLT utilizada no backup. Esse problema pode ser resolvido com a
realocao de tabelas em outro filegroup, distribuindo o backup final em partes
menores que no ultraapssem a capacidade da fita. Nesse caso, deve-se criar outro
filegroup para armazenar o arquivo secundrio.
Voc precisa criar um database com tamanho inicial de 35GB, mas no possui esse
espao em uma nica unidade de disco. A distribuio a seguinte: 20GB na
unidade C e 15GB na unidade D. qual a soluo? Crie um Mster Data File com
15GB em C e um Secondary Data File com 20GB em D. os dois arquivos
constituiro uma unidade nica de gerenciamento de espao. O arquivo secundrio
criado na unidade D ser visto pelo SQL Server como uma extenso natural do
arquivo primrio. Nesses casos, o arquivo secundrio dever ser criado no mesmo
filegroup do arquivo que se deseja expandir (PRIMARY).
C:\Teste\db_Teste_data.MDF
C:\Teste\db_Teste.NDF
Db_Teste
C:\Teste\db_Teste_log.LDF
FILENAME
SIZE
FILEGROWTH
)
= Nc:\Teste\db_Teste_Log.LDF,
= 1,
= 10%
Vamos a um exemplo:
DBCC UPDATEUSAGE (Northwind)
DBCC CHECKDB
( 'database_name'
[ , NOINDEX
| { REPAIR_ALLOW_DATA_LOSS
| REPAIR_FAST
| REPAIR_REBUILD
}]
) [ WITH { [ ALL_ERRORMSGS ]
[ , [ NO_INFOMSGS ] ]
[ , [ TABLOCK ] ]
[ , [ ESTIMATEONLY ] ]
[ , [ PHYSICAL_ONLY ] ]
}
]
DBCC CHECKTABLE
( 'table_name' | 'view_name'
[ , NOINDEX
| index_id
| { REPAIR_ALLOW_DATA_LOSS
| REPAIR_FAST
| REPAIR_REBUILD }
]
) [ WITH { [ ALL_ERRORMSGS | NO_INFOMSGS ]
[ , [ TABLOCK ] ]
[ , [ ESTIMATEONLY ] ]
[ , [ PHYSICAL_ONLY ] ]
}
]
Por padro, somente a role de servidor sysadmin que tem permisso para executar
este comando.
Considere o exemplo:
DBCC HELP (CHCKDB)
Este comando ir retornar a sintaxe para o comando DBCC CHECKDB.
Agora considere o seguinte exemplo:
DBCC HELP (?)
Este comando retorna uma listagem de todos os comandos DBCC, sem o prefixo DBCC,
para os quais est disponvel ajuda, atravs do comando DBCC HELP.
Nota: para uma referncia completa de todos os comandos DBCC, voc pode acessar o
item DBCC, na referncia da linguagem T-SQL, no Books Online.
Opes disponveis
A seguir, temos uma lista das opes mais comuns de banco de dados. Para maiores
detalhes em cada uma das opes, veja no Books Online.
As opes marcadas com um asterisco (*) indicam que essa opo pode ser
configurada pelo Enterprise Manager; caso contrrio, uma opo s altervel atravs de
procedimentos armazenados.
*ANSI null default
Controla se o valor padro para todos os tipos de dados NULL. A Microsoft pe o
padro em NOT NULL. Se esta opo estiver em TRUE, o padro ser NULL para o banco
de dados. Quando se entrar com o comando CREATE TABLE, a no ser que o criador
indique explicitamente NOT NULL, a regra se aplicar tambm criao da tabela.
ANSI Nulls
Quando em TRUE, as comparaes de NULL com qualquer valor vo retornar um
NULL. Quando em FALSE, apenas comparaes de valores no-Unicode retornaro TRUE
se e somente se ambos valores forem nulos. O padro para essa opo FALSE.
ANSI Warnings
Quando em TRUE, avisos de erro so exibidos, quando ocorrerem condies tais
como diviso por zero ou valores nulos aparecerem em funes de agregao. Por padro,
FALSE.
*autoclose
Quando em TRUE, o banco de dados fechado automaticamente quando o ltimo
usurio encerra a conexo. Isto muito til para ambientes pequenos, mas deve ser evitado
nos casos em que conexes so constantemente feitas e encerradas. A quantidade de carga
adicional gerada pela abertura e fechamento de um banco de dados podem ter efeitos
negativos em um ambiente de produo.
autoshrink
Quando em TRUE, o SQL Server periodicamente reduzir os arquivos do banco de
dados se necessrio.
*dbo use only
Quando em TRUE, apenas o dbo (proprietrio do banco de dados) tem acesso ao
banco de dados. Use esta opo quando estiver executando reparos em bancos de dados.
published
Utilizado para relicao, quando published estiver em TRUE, indica que a
publicao est habilitada. Colocar essa opo em FALSE desabilita a publicao.
*read only
Se TRUE indica que o banco de dados somente para leitura. FALSE permite
acesso para leitura/escrita.
*recursive triggers
Quando TRUE, permitido o disparo de gatilhos recursivos [recursive triggers].
Quando FALSE (o padro), gatilhos no podem disparar recursivamente. Um gatilho
recursivo aquele que dispara na tabela que o originou, causando uma atualizao em outra
tabela, a qual causa uma atualizao na tabela que originou o gatilho.
*select into / bulk copy
Permite que o banco de dados aceite aes no registradas em log, tais como
SELECT INTO e o utilitrio BCP fazem.
*single user
Permite que apenas um usurio acesse o banco de dados.
subscribed
Quando em TRUE, o banco de dados pode ser assinado para publicao.
*torn page detection
Se TRUE, o SQL Server detectar leituras incompletas em disco, e far com que
sejam marcadas. Quedas de energia ou outros defeitos podem causar essas leituras
incompletas.
Truncate log on Checkpoint (*trunc. Log on chkpt.)
Quando estiver em TRUE, o SQL Server trunca o log de transaes toda vez que
encontrar um checkpoint. Esta opo usada freqentemente para desenvolvimento,
fazendo com que o log de transaes no fique cheio com tanta freqncia. Voc no deve
utilizar esta opo em um sistema "real".
Por exemplo:
sp_dboption 'pubs', 'read only', 'true'
Para ver o estado atual das opes do banco de dados pubs, entre com o seguinte
comando:
sp_dboption 'pubs'
2. Expanda o servidor.
3. Expanda os bancos de dados.
4. Clique com o boto direito no banco de dados que voc quer mudar, e ento clique
em Propriedades [Porperties ].
5. Selecione as opes a mudar.
6. Clique em OK quando tiver acabado.
Segurana
Conceitos
Criando logins do SQL Server
Criando usurios do banco de dados
Criando grupos de usurios
Definindo permisses
Objetivos:
- Conhecer os recursos do SQL Server para controle de acesso ao banco de dados;
- Aprender a criar logins de usurio e usurios do banco de dados.
Conceitos
Os recursos de segurana do SQL Server permitem determinar:
Quais usurios podem usar o SQL Server.
Quais usurios podem acessar cada banco de dados.
As permisses de acesso para cada objeto de banco de dados e para cada usurio.
As permisses de acesso para cada comando SQL em cada banco de dados, para
cada usurio.
Existem quatro barreiras para que os usurios possam acessar dados em um servidor SQL
Server:
O sistema operacional de rede; o usurio deve efetuar logon na rede.
A autenticao do SQL Server; o usurio deve ter uma conta no SQL Server.
A autenticao de banco de dados; o ID do usurio deve existir em uma tabela de
sistema do banco de dados (mais especificamente, a tabela sysusers)
A autenticao de objetos; o usurio deve ter permisses para acessar qualquer
objeto (tabelas, vises, entre outros).
Autenticao de usurios
Quando um usurio tenta acessar um servidor SQL Server, ele pode ser autenticado
de duas maneiras: pela Autenticao do Windows NT ou pela Autenticao do SQL Server.
No confunda isso com modo de segurana, que um tpico muito semelhante.
A autenticao do Windows NT se aproveita da segurana embutida no Windows NT
Server, a qual inclui caractersticas como senhas criptografadas, senhas que expiram,
tamanho mnimo de senhas, bloqueio de conta, e restrio de acesso com base em nomes de
computador.
O SQL Server pode confiar no Windows NT para autenticar logins, ou pode ele
mesmo autenticar os logins.
Nota: O SQL Server no ir reconhecer grupos nem usurios que foram excludos e depois
recriados no Windows NT. Os grupos devem ser excludos do SQL Server e adicionados
novamente, pois o SQL Server usa o identificador de segurana (SID) do Windows NT
para identificar um grupo ou usurio. E um grupo ou usurio excludo e depois criado
novamente com o mesmo nome no Windows NT, ter um SID diferente.
Quando o SQL Server autentica o login, ocorre o seguinte:
Quando um usurio se conecta ao SQL Server com um nome de usurio e senha de
uma conta do SQL Server, o mesmo verifica que um login existe na tabela de
sistema syslogins e que a senha especificada igual a que se tem gravada.
Se o SQL Server no tem uma conta de login com esse nome de usurio ou a
senha no a que se tem gravada, autenticao falha e a conexo recusada.
Modos de segurana
Um modo de segurana se refere a como o DBA (administrador do banco de dados)
configura o SQL Server para autenticar usurios. Um servidor pode usar um de dois modos
Em Authentication, caso voc selecione "SQL Server and Windows NT", o modo
de segurana mista (mixed mode) estar sendo definido.
Caso voc selecione "Windows NT only", o modo de segurana do Windows NT
estar sendo definido.
Em qualquer dos casos, voc deve parar e reiniciar o servio MSSQL Server para
que a mudana tenha efeito. Para isso, voc pode usar, entre outras ferramentas, o
Service Manager.
Logins
Um login do SQL Server (ou login ID) um nome que identifica um usurio para o
SQL Server. Cada login tem uma senha, que deve ser informada no caso da segurana
mista (ver abaixo).
Papis [Roles]
Na sua essncia, um papel [role] um grupo de usurios que tm necessidades
semelhantes de acesso ao SQL Server. Mas, os papis so um pouco mais complexos do
que isso. Por exemplo, h uma poro de tipos diferentes de papis do SQL Server,
incluindo os seguintes:
Papis predefinidos de servidor [Predefined server roles]
Geralmente, voc no precisar de todos esses papis quando for delegar tarefas
administrativas do SQL Server para ajudantes. Em muitos casos, voc provavelmente s
atribuir seus ajudantes a um ou dois papis, dando-lhes as permisses especficas que eles
precisam para executar as tarefas que voc delegou a eles. Os usurios podem pertencer a
mais de um papel ao mesmo tempo.
Quando for criar papis personalizados de banco de dados, tenha o seguinte em mente:
Papis personalizados de banco de dados, como ocorre com qualquer papel do SQL
Server, so utilizados para agrupar usurios semelhantes que precisam do mesmo
conjunto de permisses para acessar o SQL Server.
Papis personalizados de bancos de dados so criados dentro de um banco de dados
e no podem se estender a vrios bancos de dados.
Usurios podem pertencer a mais de um papel, seja personalizado ou predefinido.
Papis personalizados podem incluir usurios do NT Server, grupos globais do NT
Server, IDs de usurios de bancos de dados do SQL Server, e outros papis do SQL
Server.
Nota: Se voc tiver permisso para a criao de grupos globais e utilizar a autenticao do
Windows NT, voc deve sempre usar grupos globais ao invs de papis personalizados de
banco de dados. O uso de grupos globais ao invs de papis personalizados de banco de
dados geralmente reduz o tempo necessrio para gerenciar as contas de usurio do SQL
Server e do NT Server, pois grupos globais funcionam com ambos. Papis personalizados
de banco de dados funcionam apenas no SQL Server. Alm disso, grupos globais podem se
estender a vrios bancos de dados, enquanto papis so especficos para cada banco de
dados, o que os torna menos flexveis que grupos globais.
Na caixa "Name" digite o nome do papel de banco de dados que voc quer criar.
Depois, voc deve informar se voc est criando um papel padro [Standard Role] ou um
papel de aplicao [Application Role]. Se voc escolher criar um papel padro, voc tem a
opo de adicionar um ou mais IDs de usurios de banco de dados ao papel agora (clicando
em Add...). Ou ento, voc pode pular este passo agora e adicionar IDs de usurios de
banco de dados posteriormente, usando as tcnicas mostradas em Gerenciando usurios . Se
voc escolher papel de aplicao, voc tambm dever informar uma senha.
Depois de terminar de informar o que foi pedido, clique em Ok para criar o novo papel de
banco de dados. Isso fechar a caixa de dilogo acima e ento o novo papel ser mostrado
no Enterprise Manager.
Nota: Lembre-se que papis de banco de dados so criados para cada banco de dados. Eles
no so compartilhados entre bancos de dados.
banco de dados. Se um papel de banco de dados tem um ou mais IDs de usurio de banco
de dados associado a ele, voc deve remov-los do papel antes de tentar excluir o papel. Se
voc tentar excluir um papel sem antes remover os IDs de usurios a ele associados, voc
ver uma mensagem de erro.
Para excluir um papel de banco de dados, faa o seguinte:
7. No Enterprise Manager, expanda o banco de dados em que est definido o papel que
voc quer excluir.
8. Clique em Roles e, no lado direito da tela, selecione o papel a ser excludo. D um
duplo clique no mesmo, e verifique se em baixo de User, h algum usurio listado.
9. Caso haja algum usurio, remova-o selecionando-o e clicando no boto Remove.
10. Feito isso, clique em Ok, selecione o papel a ser excludo, clique no mesmo com o
boto direito e selecione Delete.
11. Lhe ser perguntado se voc de fato quer excluir o papel. Confirme, clicando em
Yes.
Caso voc saiba de antemo que no h usurios associados a esse papel, v direto para o
passo 4.
Para adicionar um login ao papel de servidor, clique no boto Add. Aparece a caixa
de dilogo "Adicionar Membros" [Add Mebers], com todos os logins definidos para
o servidor.
Escolha um ou mais logins para adicionar a esse papel de servidor. Cada vez que
voc selecionar um login, ele ficar marcado, e assim ficar at que voc o clique de
novo. Depois de selecionados todos os logins que voc quer adicionados ao papel
de servidor, clique em Ok. Ento voc volta para a caixa de dilogo de propriedades
do papel de servidor (mostrada acima).
Caso voc queira remover algum login que faz parte de um papel de servidor,
selecione-o, na caixa de dilogo de propriedades do papel de servidor, e clique no
boto Remove.
Quando voc tiver adicionado e/ou removido todos os logins desejados a esse papel
de servidor, clique em Ok para concluir.
Voc pode adicionar logins aos papis de servidor sempre que achar necessrio. Mas
lembre-se que o ato de delegar privilgios administrativos a usurios s vezes pode ser
arriscado, e voc no ir querer dar privilgios demais para usurios. Apenas d aos logins
os privilgios absolutamente mnimos que eles precisam para completar as tarefas que voc
os atribuiu.
Para ver informaes especficas sobre qualquer um dos logins, clique no mesmo com o
boto direito, e selecione Properties. Aparece a tela abaixo:
Aqui voc pode ver e configurar quase todas opes de login. Essa tela tem trs guias.
Na guia General, voc pode alterar a senha para esse login [Password], e definir seu
banco de dados e linguagem padro ([Database] e [Language]).
Na guia "Server Roles" mostra a quais papis de servidor o login pertence. A guia
"Database Access" mostra a quais bancos de dados o login tem acesso (ou seja, tem um
login definido na tabela syslogins do banco de dados), alm de mostrar a quais papis de
banco de dados o usurio pertence, em cada banco de dados.
Clique em Cancel para sair da jabela de propriedades do login.
Note que no lado direito da tela aparecem algumas informaes sobre os IDs definidos
para o banco de dados:
A coluna Name mostra o ID de usurio que foi adicionado a este banco de dados,
indicando quem tem a capacidade de acessar este banco de dados.
A coluna "Login Name" mostra qual login est associado com os IDs de usurio
definidos para esse banco de dados.
A coluna "Database Acces" indica o tipo de acesso que o ID de usurio tem a esse
banco de dados.
Selecione, do lado direito da tela, o login cujas informaes voc deseja ver, clique no
mesmo com o boto direito e selecione Properties.
Essa tela mostra todos os papis de banco de dados definidos para este banco de dados
(todos que aparecem listados) e tambm a quais deles este usurio especfico pertence (os
que tm a caixa de verificao ao seu lado marcada).
Para sair desta janela, clique em Cancel.
Na coluna "Name"voc v uma lista de todos os papis para esse banco de dados
particular. Na coluna "Role Type" v-se as palavras "Standard" ou "Application". Standard
significa que um papel normal de banco de dados, ebquanto Application significa que
esse papel um papel de aplicao de banco de dados.
Caso voc queira obter mais informaes sobre qualquer dos papis, clique no
mesmo com o boto direito e selecione Properties.
Essa caixa de dilogo lista os usurios do banco de dados que fazem parte deste
papel em particular.
Para sair dessa caixa de dilogo, clique em Cancel.
bem provvel que voc ache mais fcil ver estas informaes atravs das
informaes de login, como descrito anteriormente.
Essa caixa de dilogo tem duas guias: a guia "General", que te diz quais logins
foram atribudos a esse papel particular. A guia "Permissions" te mostra as vrias
permisses que esse papel recebeu.
Clique em Cancel para sair dessa janela.
Nota: Esse o nico local onde se pode ver informaes sobre papis de servidor.
Permisses
At agora, j vimos como criar e gerenciar logins que so usados para controlar o
acesso ao SQL Server. Vimos tambm como criar e gerenciar IDs de usurios de bancos de
dados, os quais so usados para controlar o acesso a bancos de dados individualmente. Mas,
mesmo que um usurio tenha um login e um ID de usurio vlido, ele no pode acessar
qualquer dado em um banco de dados sem que lhe tenham sido dadas permisses explcitas
para acessar os objetos armazenados no banco de dados.
Permisses so usadas no SQL Server para especificar quais usurios podem ter
acesso a quais objetos de bancos de dados, e o que eles podem fazer com tais objetos. Se
um usurio no receber explicitamente a permisso para acessar um objeto, ele no ter
acesso ao mesmo. Permisses podem ser atribudas a usurios (contas do NT Server ou do
SQL Server), grupos (grupos globais do NT Server), e papis (papis predefinidos de
servidor, de banco de dados e papis personalizados de bancos de dados). mais fcil
atribuir permisses a grupos e papis do que a usurios individuais (a quantidade de
trabalho braal exigida menor).
As tarefas descritas acima podem ser realizadas diretamente atravs de comandos SQL,
ou usando o Enterprise Manager. Voc pode atribuir a um usurio uma nica permisso por
vez, todas elas, ou um conjunto das permisses de comando disponveis.
Na realidade, raramente sero usadas as permisses para comandos SQL, pois o SQL
Server j inclui papis que cumprem as mesmas funes que a atribuio dessas
permisses. Por exemplo, o papel predefinido de servidor Sysadmin consegue reaIizar
qualquer tarefa que possa ter sido atribuda a um usurio atravs de permisses para
comandos SQL. Assim como o papel predefinido de banco de dados db_backupoperator
pode fazer os backups de um banco de dados da mesma maneira que quem recebeu a
permisso DUMP DATABASE. O mais prtico atribuir os usurios a papis de servidor
ou de banco de dados que lhe permitam fazer as tarefas que forem necessrias.
Permisses de objetos
O tipo mais comum de permisso atribudo a usurios, grupos e papis a permisso de
objetos. Essas permisses determinam quem pode acessar um objeto preexistente e o que
esse usurio pode fazer com tal objeto. Quando voc atribui a um usurio uma permisso de
objeto, voc na verdade est dando a tal usurio a capacidade de executar certos comandos
SQL sobre objetos em um banco de dados. Essas permisses so as seguintes:
DELETE: permite excluir uma tabela ou viso em um banco de dados.
EXECUTE: premite a execuo de um procedimento armazenado.
INSERT: permite adicionar-se uma nova linha em uma tabela, ou em uma tabela
atravs de uma viso.
REFERENCES: (DRI) permite ligar duas tabelas usando uma coluna comum.
SELECT: permite pesquisar e visualizar dados de uma viso, tabela ou coluna.
UPDATE: permite modificar dados em uma tabela, coluna de uma tabela, ou em
uma tabela atravs de uma viso.
As tarefas relacionadas a objetos citadas acima podem ser executadas com o Enterprise
Manager, ou pelo uso de comandos SQL, ou indiretamente atravs do uso de qualquer
aplicao "front-end" de cliente que use comandos SQL para acessar dados do SQL Server
em um servidor. Independente de como um usurio acessa objetos em um banco de dados,
cada usurio deve receber explicitamente permisses, em cada objeto, para realizar o
acesso.
Permisses implcitas
Uma permisso implcita uma permisso que um usurio obtm apenas pelo fato
de pertencer a um papel predefinido de banco de dados ou de servidor, ou por ser o
proprietrio de um objeto de banco de dados. Permisses implcitas no podem ser
atribudas a usurios. Ao invs disso, um usurio que precise de uma permisso implcita
deve ser adicionado a um papel predefinido que j tenha tal permisso. Permisses
implcitas podem assim ser atribudas a usurios, papis personalizados ou grupos, com a
simples atribuio dos mesmos a um papel predefinido de banco de dados ou de servidor.
Precedncia de permisses
Cinco nveis de permisses podem ser atribudas a um usurio, conforme segue:
Permisses individuais
Permisses de grupos globais do NT Server
Permisses de papis predefinidos de servidor
Permisses de papis predefinidos de bancos de dados
Permisses de papis personalizados de bancos de dados.
As permisses podem ser dos tipos: implcita, de comandos ou de objetos.
O que ocorre se um usurio receber permisses diferentes atravs de vrias permisses
individuais, vrios grupos ou papis de que o mesmo faa parte?
A priori, as permisses somam-se, ou seja: as permisses que um usurio tenha
como membro de um grupo somam-se s permisses que ele tiver como usurio individual
e assim por diante. Mas h uma exceo! A permisso "negar acesso" [deny access]
sobrepe-se a qualquer outra permisso para o objeto em questo. Quer dizer que se um
usurio tiver obtido permisso para visualizar dados de uma tabela, atravs da permisso de
comando SELECT para a tabela, e o mesmo usurio fizer parte de um grupo global que tem
a permisso de "acesso negado" tabela em questo, sua permisso efetiva ser a de
"acesso negado", ou seja, no lhe ser permitido acessar tal banco de dados.
Apesar de termos exemplificado aqui citando uma tabela, essa regra vlida para
qualquer objeto de banco de dados.
comandos. Isso no apenas te ajudar a trabalhar com permisses, mas tambm te mostrar
como executar uma tarefa que voc estar realizando regularmente como um DBA. Vamos
ver como visualizar as permisses atuais de objeto para todos os usurios, grupos, e papis
em um nico banco de dados utilizando o Enterprise Manager. Lembre-se que permisses
so gerenciadas para cada banco de dados, e que voc deve realizar estes passos em cad
banco de dados no qual voc queira ver as permisses.
Visualizando permisses para comandos SQL
No Enterprise Manager, usando uma conta com privilgios de sysadmin, expanda o
banco de dados cujas permisses de comando voc quer visualizar. Clique no mesmo com
o boto direito e em Properties. Aparece a caixa de dilogo de Propriedades do banco de
dados:
Agora, clique na guia Permissions. mostrada a tela de permisses para comandos
SQL
Na primeira coluna desta tela, embaixo do ttulo User/Role, esto listados toos os
IDs de usurios de bancos de dados para esse banco de dados. Lembre-se que essa coluna
pode exibir quaisquer grupos, papis ou usurios. Nas outras colunas esto as vrias
permisses para comandos SQL que podem ser atribudas. Note que esta tela no exibe
todas as permisses de uma vez; voc deve percorr-la para a direita para poder v-las
todas. Depois de ver todas as permisses que podem ser atribudas, saia desta tela clicando
em Cancel. Isso te leva de volta tela do Enterprise Manager.
Visualizando permisses de objetos
A visualizao de permisses de objetos m pouco mais difcil do que a
visualizao de permisses para comandos SQL. Voc pode v-las da perspectiva de
usurios, grupos, ou papis, ou ento da perspectiva dos prprios objetos. Analisaremos
aqui as duas maneiras.
14. Agora, no lado direito da tela, clique com o boto direito em um usurio, grupo ou
papel personalizado, cujas permisses de objetos voc quer visualizar,e ento
selecione Properties. Aparece ento a janela de propriedades do usurio ou do papel
(dependendo
do
que
voc
selecionou
no
passo
2).
15. Clique no boto Permissions para ver as permisses a nvel de objeto que esse
usurio (ou papel) tem.
Veja que h dois botes no topo da tela. Quando o primeiro [List all objects] est
selecionado, todos os objetos pertencentes ao banco de dados so exibidos na tela. Se a
segunda opo [List only objects with permissions for this user] for selecionada, apenas
aqueles objetos para os quais o usurio tm permisso so listados.
Na primeira coluna h um cone que representa o objeto de banco de dados. A segunda
coluna, lhe mostra o nome do objeto. A coluna Owner mostra quem o proprietrio do
objeto. As outras colunas mostram as permisses de objetos disponveis. Se alguma coluna
estiver marcada (com sua caixa de verificao ativada), isso indica que esse usurio possui
aquela
permisso
para
o
objeto
em
questo.
Perceba que nem todos os objetos tm todas as permisses de objeto disponveis. Por
exemplo, procedimentos armazenados tm apenas a permisso de objeto Execute.
16. Para terminar de visualizar as permisses de objeto, saia da tela clicando em
Cancel. Clique de novo em Cancel e voc estar de volta ao Enterprise Manager.
indica que um usurio, grupo ou papel obteve a permisso de objeto associada. Veja que
nem todos os objetos tm todas as permisses de objeto.
5. Depois de terminar de visualizar as permisses de objeto, voc pode sair clicando
em Cancel duas vezes, primeiro para a tela de permisses, e depois para a caixa de
dilogo de propriedades. Ento voc volta para a tela principal do Enterprise
Manager.
4. Para revogar uma permisso de comando que tenha sido atribuda anteriormente,
clique na caixa de verificao que representa a permisso de comando que voc
quer revogar do usurio, grupo, ou papel. Quando voc clicar na caixa de
verificao, ela muda para um X vermelho (como mostrado abaixo), indicando que
a permisso ser revogada. A permisso s de fato revogada quando voc clica em
Ok ou Apply.
5. Depois de revogar e conceder todas as permisses para comandos SQL que voc
queira, saia dessa tela clicando em Ok. Ento voc volta para o Enterprise Manager.
E a do REVOKE :
REVOKE {ALL | comando[,...n]}
FROM conta_segurana [,...n]
Onde:
comando o comando SQL para o qual a permisso est sendo concedida/removida. Os
comandos podem ser:
CREATE DATABASE
CREATE DEFAULT
CREATE PROCEDURE
CREATE RULE
CREATE TABLE
CREATE VIEW
BACKUP DATABASE
BACKUP LOG
ALL indica que todas as permisses da(s) conta(s) de segurana em questo sero
concedidas/revogadas.
conta_segurana a conta de segurana no banco de dados atual para a qual as permisses
esto sendo adicionadas ou removidas. Pode ser um:
Usurio do SQL Server ou do NT
Grupo do NT
Papel do SQL Server
n indica que pode ser informado mais de um nome de conta de segurana para se
conceder/revogar permisses, assim como pode-se informar mais de um comando para tr
permisso concedida/revogada. Basta separ-los por vrgula.
Caso quisssemos por exemplo, permitir que um usurio pudesse criar uma tabela,
digitaramos
GRANT create table TO usuario