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égio- SELECTnos objetos subjacentes referenciados na vista. Por exemplo, suponhamos que a vista- SingerNamesé criada na tabela- Singers.- 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 consulta- SELECT * FROM SingerNames. A função tem de ter o privilégio- SELECTna vista e tem de ter o privilégio- SELECTnas três colunas referenciadas ou na tabela- Singerscompleta.- 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 vista- AlbumsBudgeté criada na tabela- Albums.- 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 consulta- SELECT * FROM AlbumsBudget. A função só precisa do privilégio- SELECTna vista. Não precisa do privilégio- SELECTnas três colunas referenciadas nem na tabela- Albums.
- Depois de conceder - SELECTnum subconjunto de colunas para uma tabela, o utilizador do FGAC já não pode usar- SELECT *nessa tabela. As consultas nessa tabela têm de especificar todas as colunas a incluir.
- SELECTconcedido numa coluna gerada não concede- SELECTnas 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 conceder- EXECUTEna 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égio- SELECTnessas colunas. Se a função de agregação não especificar nenhuma coluna, por exemplo,- COUNT(*), a função tem de ter o privilégio- SELECTem, 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áusulas- WHEREda 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 especificar- ON DELETE CASCADE, as linhas da tabela secundária são eliminadas mesmo sem o privilégio- DELETEna 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)