O sistema de privilégios do MySQL garante que todos usuários possam fazer exatamente as operações que lhe é permitido. Quando você conecta a um servidor MySQL, sua identidade é determinada pela maquina de onde você conectou e o nome de usuário que você especificou. O sistema concede privilégios de acordo com sua identidade e com o que você deseja fazer.
O MySQL considera tanto os nomes de máquinas como os nomes de
usuários porque existem poucas razões para assumir que um
determinado nome de usuário pertence a mesma pessoa em todo
lugar na Internet. Por exemplo, o usuário
bill
que conecta de
whitehouse.gov
não deve necessariamente ser
a mesma pessoa que o usuário bill
que
conecta da microsoft.com
O MySQL lida com
isto, permitindo a distinção de usuários em diferentes
máquinas que podem ter o mesmo nome: Você pode conceder a
bill
um conjunto de privilégios para
conexões de whitehouse.gov
e um conjunto
diferente de privilégios para conexões de
microsoft.com
.
O controle de acesso do MySQL é composto de dois estágios:
Estágio 1: O servidor confere se você pode ter acesso ou não.
Estágio 2: Assumindo que você pode conectar, o servidor verifica cada requisição feita para saber se você tem ou não privilégios suficientes para realizar a operação. Por exemplo, se você tentar selecionar linha de uma tabela em um banco de dados ou apagar uma tabela do banco de dados, o servidor se certifica que você tem o privilégio select para a tabela ou o privilégio drop para o banco de dados.
Note que se os seus privilégios são alterados (tanto por você quanto por outro) enquanto você está conectado, estas alterações não irão necessariamente ter efeito com a sus próxima consulta ou consultas. Veja Secção 4.4.3, “Quando as Alterações nos Privilégios tem Efeito” para maiores detalhes.
O servidor utiliza as tabelas user
,
db
e host
no banco de
dados mysql
em ambos estágios do controle de
acesso. Os campos nestas tabelas de permissão são detalhados
abaixo:
Nome da Tabela | user | db | host |
Campos de Escopo | Host |
Host |
Host |
User |
Db |
Db |
|
Password |
User |
||
Campos de Privilégio | Select_priv |
Select_priv |
Select_priv |
Insert_priv |
Insert_priv |
Insert_priv |
|
Update_priv |
Update_priv |
Update_priv |
|
Delete_priv |
Delete_priv |
Delete_priv |
|
Index_priv |
Index_priv |
Index_priv |
|
Alter_priv |
Alter_priv |
Alter_priv |
|
Create_priv |
Create_priv |
Create_priv |
|
Drop_priv |
Drop_priv |
Drop_priv |
|
Grant_priv |
Grant_priv |
Grant_priv |
|
References_priv |
References_priv |
References_priv |
|
Reload_priv |
|||
Shutdown_priv |
|||
Process_priv |
|||
File_priv |
|||
Show_db_priv |
|||
Super_priv |
|||
Create_tmp_table_priv |
Create_tmp_table_priv |
Create_tmp_table_priv |
|
Lock_tables_priv |
Lock_tables_priv |
Lock_tables_priv |
|
Execute_priv |
|||
Repl_slave_priv |
|||
Repl_client_priv |
|||
ssl_type |
|||
ssl_cypher |
|||
x509_issuer |
|||
x509_cubject |
|||
max_questions |
|||
max_updates |
|||
max_connections |
No segundo estágio do controle de acesso (verificação da
solicitação), o servidor pode, se a solicitação involver
tabelas, consultar adicionalmente as tabelas
tables_priv
e
columns_priv
. Os campos nestas tabelas são
mostrados abaixo:
Nome da tabela | tables_priv |
columns_priv |
Campos de escopop | Host |
Host |
Db |
Db |
|
User |
User |
|
Table_name |
Table_name |
|
Column_name |
||
Campos de privilégio | Table_priv |
Column_priv |
Column_priv |
||
Outros campos | Timestamp |
Timestamp |
Grantor |
Cada tabela de permissões contêm campos de escopo e campos de privilégios.
Campos de escopo determinam o escopo de cada entrada nas
tabelas, isto é, o contexto no qual a entrada se aplica. Por
exemplo, uma entrada na tabela user
com
valores Host
e User
de
'thomas.loc.gov'
e 'bob'
devem ser usados para autenticar conexões feitas ao servidor
por bob
da máquina
thomas.loc.gov
. De maneira similar, uma
entrada na tabela db
com campos
Host
, User
e
Db
de 'thomas.loc.gov'
,
'bob'
e 'reports'
devem
ser usados quando bob
conecta da máquina
thomas.loc.gov
para acessar o banco de dados
reports
. As tabelas
tables_priv
e columns_priv
contem campos de escopo indicando as combinações de tabelas ou
tabela/coluna para o qual cada entrada se aplica.
Para propósitos de verificação de acessos, comparações de
valores Host
são caso insensitivo, valores
User
, Password
,
Db
e Table_name
são caso
sensitivo. Valores Column_name
são caso
insensitivo no MySQL versão 3.22.12 ou posterior.
Campos de privilégios indicam os privilégios concedidos por uma entrada na tabela, isto é, quais operações podem ser realizadas. O servidor combina as informações de várias tabelas de concessão para formar uma descrição completa dos privilégios de um usuário. As regras usadas para fazer isto são descritas em Secção 4.3.10, “Controle de Acesso, Estágio 2: Verificação da Requisição”.
Campos de escopo são strings, declaradas como mostrado abaixo; os valores padrão para cada é a string vazia:
Nome do Campo | Tipo | |
Host |
CHAR(60) |
|
User |
CHAR(16) |
|
Password |
CHAR(16) |
|
Db |
CHAR(64) |
(CHAR(60) para as tabelas
tables_priv e
columns_priv ) |
Table_name |
CHAR(60) |
|
Column_name |
CHAR(60) |
Nas tabelas user
, db
e
host
, todos campos de privilégios são
declarados como ENUM('N','Y')
--- cada um
pode ter um valor de 'N'
ou
'Y'
e o valor padrão é
'N'
.
Nas tabelas tables_
e
columns_priv
, os campos de privilégios são
declarados como campos SET
:
Nome de tabela | Nome do campo | Possíveis elementos do conjunto |
tables_priv |
Table_priv |
'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop',
'Grant', 'References', 'Index', 'Alter' |
tables_priv |
Column_priv |
'Select', 'Insert', 'Update', 'References' |
columns_priv |
Column_priv |
'Select', 'Insert', 'Update', 'References' |
De maneira resumida, o servidor utiliza as tabelas de permissões desta forma:
Os campos de escopo da tabela user
determinam quando permitir ou aceitar conexões. Para
conexões permitidas, qualquer privilégio concedido em uma
tabela user
indica o privilégio global
(superusuário) do usuário. Estes privilégios se aplicam a
todos os bancos de dados no
servidor.
As tabelas db
e host
são usadas juntas:
Os campos de escopo da tabela db
determinam quais usuários podem acessar determinados
bancos de dados de máquinas determinadas. Os campos de
privilégios determinam quais operações são
permitidas.
A tabela host
é usada como uma
extensão da tabela db
quando você
quer que uma certa entrada na tabela
db
seja aplicada a diversas
máquinas. Por exemplo, se você deseja que um usuário
esteja apto a usar um banco de dados a partir de
diversas máquinas em sua rede, deixe o campo
Host
vazio no registro da tabela
db
, então popule a tabela
Host
com uma entrada para cada uma
das máquinas. Este mecanismo é descrito com mais
detalhes em Secção 4.3.10, “Controle de Acesso, Estágio 2: Verificação da Requisição”.
As tabelas tables_priv
e
columns_priv
são similares à tabela
db
, porém são mais finas: Elas se
aplicam ao nível de tabelas e colunas em vez do nível dos
bancos de dados.
Perceba que os privilégios administrativos
(RELOAD
, SHUTDOWN
e etc)
são especificados somente na tabela user
.
Isto ocorre porque operações administrativas são operações
no próprio servidor e não são específicas e não
específicas dos bancos de dados, portanto não existe razão
para listar tais privilégios nas outras tabelas de permissão.
De fato, somente a tabela user
necessita ser
consultada para determinar se você pode ou não realizar uma
operação administrativa.
O privilégio FILE também só
é especificado na tabela user
. Ele não é
um privilégio administrativo, mas sua habilidade para ler ou
escrever arquivo no servidor é independtende do banco de dados
que você está acessando.
O servidor mysqld
le o conteúdo das tabelas
de permissões uma vez, quando é iniciado. Alterações nas
tabelas de permissões tem efeito como indicado em
Secção 4.4.3, “Quando as Alterações nos Privilégios tem Efeito”.
Quando você modifica o conteúdo das tabelas de permissões, é
uma boa idéia ter certeza que suas alterações configuraram os
privilégios da forma desejada. Para ajuda no diagnostico de
problemas, veja Secção 4.3.12, “Causas dos Erros de Accesso Negado
”. Para conselhos
sobre asssuntos de segurança, See Secção 4.3.2, “Como Tornar o MySQL Seguro contra Crackers”.
Uma ferramenta de diagnóstico útil é o script
mysqlaccess
, que Yves Carlier fornece na
distribuição MySQL. Chame mysqlaccess
com a
opção --help
para descobrir como ele
funciona. Perceba que o mysqlaccess
confere o
acesso usando somente as tabelas user
,
db
e host
. Ele não
confere privilégios no nível de tabelas ou colunas.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.