Esta página descreve os privilégios que pode conceder a uma função da base de dados para um controlo de acesso detalhado. Estas informações aplicam-se a bases de dados com dialeto GoogleSQL e bases de dados com dialeto PostgreSQL.
Para saber mais sobre as funções da base de dados e o controlo de acesso detalhado, consulte o artigo Vista geral do controlo de acesso detalhado.
A tabela seguinte mostra os privilégios de controlo de acesso detalhado e os objetos da base de dados nos quais podem ser concedidos.
SELECIONAR | INSERIR | ATUALIZAR | ELIMINAR | EXECUTE | UTILIZAÇÃO | |
---|---|---|---|---|---|---|
Esquema | ✓ | |||||
Tabela | ✓ | ✓ | ✓ | ✓ | ||
Coluna | ✓ | ✓ | ✓ | ✓ | ||
Ver | ✓ | |||||
Alterar stream | ✓ | |||||
Função de leitura da stream de alterações | ✓ | |||||
Sequência | ✓ | ✓ | ||||
Modelo | ✓ |
As secções seguintes fornecem detalhes sobre cada privilégio.
SELECT
Permite que a função leia ou consulte a partir de uma tabela, uma vista, uma stream de alteração, uma sequência ou um modelo.
Se for especificada uma lista de colunas para uma tabela, o privilégio é válido apenas nessas colunas. Se não for especificada nenhuma lista de colunas, o privilégio é válido em todas as colunas da tabela, incluindo as colunas adicionadas posteriormente. Não é permitida uma lista de colunas para uma vista.
O Spanner suporta vistas de direitos do invocador e vistas de direitos do definidor. Para mais informações, consulte o artigo Vista geral das visualizações.
Se criar uma vista com direitos do invocador, para consultar a vista, a função ou o utilizador da base de dados precisa do privilégio
SELECT
na vista e também do privilégioSELECT
nos objetos subjacentes referenciados na vista. Por exemplo, suponhamos que a vistaSingerNames
é criada na tabelaSingers
.CREATE VIEW SingerNames SQL SECURITY INVOKER AS SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;
Suponhamos que a função da base de dados
myRole
executa a consultaSELECT * FROM SingerNames
. A função tem de ter o privilégioSELECT
na vista e tem de ter o privilégioSELECT
nas três colunas referenciadas ou na tabelaSingers
completa.Se criar uma vista com direitos do definidor, para consultar a vista, a função ou o utilizador da base de dados só precisa do privilégio
SELECT
na vista. Por exemplo, suponhamos que a vistaAlbumsBudget
é criada na tabelaAlbums
.CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;
Suponhamos que a função da base de dados
Analyst
executa a consultaSELECT * FROM AlbumsBudget
. A função só precisa do privilégioSELECT
na vista. Não precisa do privilégioSELECT
nas três colunas referenciadas nem na tabelaAlbums
.Depois de conceder
SELECT
num subconjunto de colunas para uma tabela, o utilizador do FGAC já não pode usarSELECT *
nessa tabela. As consultas nessa tabela têm de especificar todas as colunas a incluir.SELECT
concedido numa coluna gerada não concedeSELECT
nas colunas base subjacentes.Para tabelas intercaladas, a autorização
SELECT
concedida na tabela principal não é propagada para a tabela secundária.Quando concede
SELECT
num fluxo de alterações, também tem de concederEXECUTE
na função de valor de tabela para o fluxo de alterações. Para mais informações, consulte o comando EXECUTE.Quando
SELECT
é usado com uma função de agregação em colunas específicas, por exemplo,SUM(col_a)
, a função tem de ter o privilégioSELECT
nessas colunas. Se a função de agregação não especificar nenhuma coluna, por exemplo,COUNT(*)
, a função tem de ter o privilégioSELECT
em, pelo menos, uma coluna na tabela.Quando usa
SELECT
com uma sequência, só pode ver as sequências para as quais tem privilégios de visualização.
Exemplos de utilização de GRANT SELECT
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 a função insira linhas nas tabelas especificadas. Se for especificada uma lista de colunas, a autorização é válida apenas nessas colunas. Se não for especificada nenhuma lista de colunas, o privilégio é válido em todas as colunas da tabela.
Se forem especificados nomes de colunas, qualquer coluna não incluída recebe o respetivo valor predefinido no momento da inserção.
Não é possível conceder
INSERT
em colunas geradas.
Exemplos de utilização de GRANT INSERT
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 a função atualize linhas nas tabelas especificadas. As atualizações podem ser
restringidas a um subconjunto de colunas da tabela. Quando usa esta opção com sequências, permite que a função chame a função get-next-sequence-value
na sequência.
Além do privilégio UPDATE
, a função precisa do privilégio SELECT
em todas as colunas consultadas. As colunas consultadas incluem colunas na cláusula WHERE
.
Não é possível conceder UPDATE
em colunas geradas.
Exemplos de utilização de GRANT UPDATE
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 a função elimine linhas das tabelas especificadas.
Não é possível conceder
DELETE
ao nível da coluna.A função também precisa de
SELECT
em quaisquer colunas que possam ser incluídas nas cláusulasWHERE
da consulta.Para tabelas intercaladas em bases de dados com dialeto GoogleSQL, o privilégio
DELETE
só é necessário na tabela principal. Se uma tabela secundária especificarON DELETE CASCADE
, as linhas da tabela secundária são eliminadas mesmo sem o privilégioDELETE
na tabela secundária.
Exemplo de utilização de GRANT DELETE
GoogleSQL
GRANT DELETE ON TABLE employees, contractors TO ROLE hr_admin;
PostgreSQL
GRANT DELETE ON TABLE employees, contractors TO hr_admin;
EXECUTE
Quando concede SELECT
num fluxo de alterações, também tem de conceder EXECUTE
na função de leitura para o fluxo de alterações. Para mais informações, consulte o artigo
Altere as funções de leitura de streams e a sintaxe de consulta.
Quando usa esta opção com modelos, permite que a função use o modelo em funções de aprendizagem automática.
Exemplo de utilização de GRANT EXECUTE
O exemplo seguinte mostra como conceder EXECUTE
na função de leitura para o fluxo de alterações denominado 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;
UTILIZAÇÃO
Quando concede USAGE
a um esquema com nome, concede privilégios de acesso a objetos contidos no esquema com nome. O privilégio USAGE
é concedido, por predefinição, ao esquema predefinido.
O que se segue?
- Configure o controlo de acesso detalhado
- Vista geral do controlo de acesso detalhado
- Declarações GRANT e REVOKE (bases de dados de dialeto GoogleSQL)
- Declarações GRANT e REVOKE (bases de dados de dialeto PostgreSQL)