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
SELECTna vista e também do privilégioSELECTnos 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
myRoleexecuta a consultaSELECT * FROM SingerNames. A função tem de ter o privilégioSELECTna vista e tem de ter o privilégioSELECTnas três colunas referenciadas ou na tabelaSingerscompleta.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
SELECTna 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
Analystexecuta a consultaSELECT * FROM AlbumsBudget. A função só precisa do privilégioSELECTna vista. Não precisa do privilégioSELECTnas três colunas referenciadas nem na tabelaAlbums.Depois de conceder
SELECTnum 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.SELECTconcedido numa coluna gerada não concedeSELECTnas colunas base subjacentes.Para tabelas intercaladas, a autorização
SELECTconcedida na tabela principal não é propagada para a tabela secundária.Quando concede
SELECTnum fluxo de alterações, também tem de concederEXECUTEna 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égioSELECTnessas colunas. Se a função de agregação não especificar nenhuma coluna, por exemplo,COUNT(*), a função tem de ter o privilégioSELECTem, pelo menos, uma coluna na tabela.Quando usa
SELECTcom 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
INSERTem 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
DELETEao nível da coluna.A função também precisa de
SELECTem quaisquer colunas que possam ser incluídas nas cláusulasWHEREda consulta.Para tabelas intercaladas em bases de dados com dialeto GoogleSQL, o privilégio
DELETEsó é 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égioDELETEna 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)