Nesta página, descrevemos os privilégios que podem ser concedidos a um papel de banco de dados para controle de acesso minucioso.
Para saber mais sobre papéis do banco de dados e controle de acesso refinado, consulte Sobre controles de acesso minuciosos.
A tabela a seguir mostra os privilégios de controle de acesso refinado e os objetos de banco de dados em que podem ser concedidos.
SELECIONAR | INSERT | ATUALIZAR | EXCLUIR | EXECUTE | |
---|---|---|---|---|---|
Tabela | ✓ | ✓ | ✓ | ✓ | |
Coluna | ✓ | ✓ | ✓ | ||
Mostrar | ✓ | ||||
Fluxo de alterações | ✓ | ||||
Mudar o TVF do stream | ✓ |
As seções a seguir fornecem detalhes sobre cada privilégio.
SELECT
Permite que o papel leia ou consulte um fluxo de tabela, visualização ou alteração.
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 colunas adicionadas depois. Uma lista de colunas não é permitida para uma visualização.
Como o Cloud Spanner atualmente só aceita visualizações de direitos de invocador, um papel de banco de dados precisa do privilégio
SELECT
na visualização, além do privilégioSELECT
nos objetos subjacentes referenciados 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 também que o papel de banco de dados
myRole
execute a consultaSELECT * FROM SingerNames
. O papel precisa terSELECT
na visualização eSELECT
nas três colunas referenciadas ou em toda a tabelaSingers
.Depois de conceder
SELECT
em um subconjunto de colunas de uma tabela, o usuário da FGAC não poderá 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 base.Para tabelas intercaladas,
SELECT
concedido na tabela pai não é propagado para a tabela filha.Ao conceder
SELECT
em um stream de alteração, você também precisa concederEXECUTE
na função com valor de tabela para o stream de alteração. Para ver mais informações, consulte EXECUTAR.Quando
SELECT
é usado com uma função de agregação 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 colunas, por exemplo,COUNT(*)
, o papel precisará ter o privilégioSELECT
em pelo menos uma coluna na tabela.
Examples
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 ordersSummary TO ROLE hr_manager; GRANT SELECT ON CHANGE STREAM ordersChangeStream TO ROLE hr_analyst;
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 após a inserção.
INSERT
não pode ser concedido em colunas geradas.
Examples
GRANT INSERT ON TABLE employees, contractors TO ROLE hr_manager; GRANT INSERT(name, address, phone) ON TABLE employees TO ROLE 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.
Além do privilégio
UPDATE
, o papel precisa do privilégioSELECT
em todas as colunas principais e consultadas. As colunas consultadas incluem colunas na cláusulaWHERE
e colunas que são usadas para calcular os novos valores de colunas atualizadas e geradas.UPDATE
não pode ser concedido em colunas geradas.
Examples
GRANT UPDATE ON TABLE employees, contractors TO ROLE hr_manager; GRANT UPDATE(name, address, phone) ON TABLE employees TO ROLE 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 de chave e em colunas que possam ser incluídas nas cláusulasWHERE
da consulta.Para tabelas intercaladas, o privilégio
DELETE
é necessário apenas na tabela pai. Se uma tabela filha especificarON DELETE CASCADE
, as linhas da tabela filha serão excluídas mesmo sem o privilégioDELETE
na tabela filha.
Exemplo
GRANT DELETE ON TABLE employees, contractors TO ROLE hr_admin;
EXECUTE
Ao conceder SELECT
em um fluxo de alterações,
você também precisa conceder EXECUTE
à função com valor de tabela (TVF) para o fluxo de alterações. Para ver informações sobre TVFs, consulte
Mudar a sintaxe de consulta de stream.
Exemplo
GRANT EXECUTE ON TABLE FUNCTION READ_my_change_stream TO ROLE hr_analyst;
Mais informações
Veja mais informações em:
- Configurar um controle de acesso refinado
- Sobre controles de acesso minuciosos
- Declarações GRANT e REVOKE