Nesta página, descrevemos os privilégios que podem ser concedidos a um papel de banco de dados para controle de acesso detalhado.
Para saber mais sobre papéis de banco de dados e controle de acesso detalhado, consulte Sobre o controle de acesso detalhado.
A tabela a seguir mostra os privilégios de controle de acesso refinados e os objetos de banco de dados em que eles podem ser concedidos.
SELECT | INSERT | ATUALIZAR | EXCLUIR | EXECUTE | USO | |
---|---|---|---|---|---|---|
Esquema | ✓ | |||||
Tabela | ✓ | ✓ | ✓ | ✓ | ||
Coluna | ✓ | ✓ | ✓ | ✓ | ||
View | ✓ | |||||
Fluxo de alterações | ✓ | |||||
Função de leitura do fluxo de alterações | ✓ | |||||
Sequência | ✓ | ✓ | ||||
Modelo | ✓ |
As seções a seguir fornecem detalhes sobre cada privilégio.
SELECT
Permite que o papel leia ou consulte uma tabela, visualização, fluxo de alterações, sequência ou modelo.
Se uma lista de colunas for especificada para uma tabela, o privilégio será válido apenas nessas colunas. Se nenhuma lista de colunas for especificada, o privilégio será válido em todas as colunas da tabela, incluindo as adicionadas posteriormente. Uma lista de colunas não é permitida para uma visualização.
O Spanner é compatível com visualizações de direitos do invocador e visualizações de direitos do definidor. Para mais informações, consulte Sobre as vistas.
Se você criar uma visualização com os direitos do invocador, para consultá-la, a função do banco de dados ou o usuário precisará do privilégio
SELECT
na visualização e também do privilégioSELECT
nos objetos subjacentes mencionados na visualização. Por exemplo, suponha que a visualizaçãoSingerNames
seja criada na tabelaSingers
.CREATE VIEW SingerNames SQL SECURITY INVOKER AS SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;
Suponha que o papel de banco de dados
myRole
execute a consultaSELECT * FROM SingerNames
. O papel precisa ter o privilégioSELECT
na visualização e o privilégioSELECT
nas três colunas referenciadas ou em toda a tabelaSingers
.Se você criar uma visualização com direitos de definição, para consultá-la, a função do banco de dados ou o usuário só precisará do privilégio
SELECT
na visualização. Por exemplo, suponha que a visualizaçãoAlbumsBudget
seja criada na tabelaAlbums
.CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;
Suponha que o papel de banco de dados
Analyst
execute a consultaSELECT * FROM AlbumsBudget
. O papel só precisa do privilégioSELECT
na visualização. O privilégioSELECT
não é necessário nas três colunas referenciadas ou na tabelaAlbums
.Depois de conceder
SELECT
em um subconjunto de colunas de uma tabela, o usuário do FGAC não pode mais usarSELECT *
nessa tabela. As consultas nessa tabela precisam nomear todas as colunas a serem incluídas.SELECT
concedido em uma coluna gerada não concedeSELECT
nas colunas de base subjacentes.Para tabelas intercaladas,
SELECT
concedido na tabela pai não se propaga para a tabela filha.Ao conceder
SELECT
em um fluxo de alterações, você também precisa concederEXECUTE
na função com valor de tabela do fluxo de alterações. Para mais informações, consulte EXECUTAR.Quando
SELECT
é usado com uma função agregada em colunas específicas, por exemplo,SUM(col_a)
, o papel precisa ter o privilégioSELECT
nessas colunas. Se a função agregada não especificar nenhuma coluna, por exemplo,COUNT(*)
, o papel precisará ter o privilégioSELECT
em pelo menos uma coluna na tabela.Ao usar
SELECT
com uma sequência, você só pode conferir aquelas que tem privilégios para visualizar.
Examples
GoogleSQL
GRANT SELECT ON TABLE employees TO ROLE hr_director; GRANT SELECT ON TABLE customers, orders, items TO ROLE account_mgr; GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO ROLE hr_manager; GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO ROLE hr_rep; GRANT SELECT ON VIEW orders_view TO ROLE hr_manager; GRANT SELECT ON CHANGE STREAM ordersChangeStream TO ROLE hr_analyst; GRANT SELECT ON SEQUENCE sequence_name TO ROLE role_name;
PostgreSQL
GRANT SELECT ON TABLE employees TO hr_director; GRANT SELECT ON TABLE customers, orders, items TO account_mgr; GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO hr_manager; GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO hr_rep; GRANT SELECT ON TABLE orders_view TO hr_manager; // orders_view is an invoker rights view GRANT SELECT ON CHANGE STREAM orders_change_stream TO hr_analyst; GRANT SELECT ON SEQUENCE sequence_name TO hr_package;
INSERT
Permite que o papel insira linhas nas tabelas especificadas. Se uma lista de colunas for especificada, a permissão será válida apenas nessas colunas. Se nenhuma lista de colunas for especificada, o privilégio será válido em todas as colunas da tabela.
Se os nomes das colunas forem especificados, qualquer coluna não incluída receberá o valor padrão na inserção.
Não é possível conceder
INSERT
em colunas geradas.
Examples
GoogleSQL
GRANT INSERT ON TABLE employees, contractors TO ROLE hr_manager; GRANT INSERT(name, address, phone) ON TABLE employees TO ROLE hr_rep;
PostgreSQL
GRANT INSERT ON TABLE employees, contractors TO hr_manager; GRANT INSERT(name, address, phone) ON TABLE employees TO hr_rep;
UPDATE
Permite que o papel atualize linhas nas tabelas especificadas. As atualizações podem ser restritas a um subconjunto de colunas da tabela. Quando usado com sequências, ele permite que o papel chame a função get-next-sequence-value
na sequência.
Além do privilégio UPDATE
, o papel precisa do privilégio SELECT
em todas as colunas de chaves e em todas as colunas consultadas. As colunas
consultadas incluem colunas na cláusula WHERE
e colunas que são usadas para
calcular os novos valores das colunas atualizadas e geradas.
Não é possível conceder UPDATE
em colunas geradas.
Examples
GoogleSQL
GRANT UPDATE ON TABLE employees, contractors TO ROLE hr_manager; GRANT UPDATE(name, address, phone) ON TABLE employees TO ROLE hr_rep;
PostgreSQL
GRANT UPDATE ON TABLE employees, contractors TO hr_manager; GRANT UPDATE(name, address, phone) ON TABLE employees TO hr_rep;
DELETE
Permite que o papel exclua linhas das tabelas especificadas.
Não é possível conceder
DELETE
no nível da coluna.O papel também precisa de
SELECT
em todas as colunas-chave e em todas as colunas que possam ser incluídas em cláusulasWHERE
de consulta.Para tabelas intercaladas em bancos de dados de dialeto GoogleSQL, o privilégio
DELETE
é necessário apenas na tabela pai. Se uma tabela filha especificarON DELETE CASCADE
, as linhas dessa tabela serão excluídas mesmo sem o privilégioDELETE
.
Exemplo
GoogleSQL
GRANT DELETE ON TABLE employees, contractors TO ROLE hr_admin;
PostgreSQL
GRANT DELETE ON TABLE employees, contractors TO hr_admin;
EXECUTE
Ao conceder SELECT
em um fluxo de alterações, você também precisa conceder EXECUTE
na
função de leitura do fluxo de alterações. Para mais informações, consulte
Funções de leitura e sintaxe de consulta do fluxo de alterações.
Quando você usa isso com modelos, ele permite que o papel use o modelo em funções de machine learning.
Exemplo
O exemplo a seguir mostra como conceder EXECUTE
na função de leitura para o
fluxo de alterações chamado my_change_stream
.
GoogleSQL
GRANT EXECUTE ON TABLE FUNCTION READ_my_change_stream TO ROLE hr_analyst;
PostgreSQL
GRANT EXECUTE ON FUNCTION spanner.read_json_my_change_stream TO hr_analyst;
USO
Quando você concede USAGE
a um esquema nomeado, ele fornece privilégios para acessar
objetos contidos nesse esquema. O privilégio USAGE
é concedido, por padrão, ao esquema padrão.
A seguir
Confira mais informações:
- Configure um controle de acesso detalhado
- Sobre o controle de acesso detalhado
- Instruções GRANT e REVOKE (bancos de dados do dialeto GoogleSQL)
- Instruções GRANT e REVOKE (bancos de dados de dialeto PostgreSQL)