.NET

Roles e Permissões

A secção Permissões é um explorador de roles e privilégios para PostgreSQL. Apresenta as roles de um servidor ao estilo do Finder, em colunas lado a lado: escolha uma role à esquerda, e as colunas à sua direita mostram de que roles ela é membro, quem é membro dela, e o que ela pode realmente fazer em cada objeto da base de dados — incluindo tudo aquilo que só tem indiretamente, através de associações de roles herdadas ou através de PUBLIC. Roles, associações, privilégios, privilégios predefinidos e propriedade podem ser criados, alterados e revogados ali mesmo.

Nota: esta secção suporta atualmente apenas o PostgreSQL. Para qualquer outra ligação, mostra As permissões ainda não são suportadas para … / De momento, apenas o PostgreSQL é suportado.

The Permissions section with three columns

Abrir a secção

Clique no ícone Permissões (o ícone das pessoas) na barra esquerda. A secção trabalha sobre uma ligação que já está aberta na secção Base de dados: a mesma faixa de separadores de ligação abertos é mostrada no seu topo, e a secção usa o separador de ligação que estiver selecionado. Sem nenhuma ligação aberta, mostra Nenhuma ligação aberta — abra primeiro uma (consulte Gerir Bases de Dados). As colunas são reconstruídas sempre que entra na secção, pelo que qualquer seleção anterior é reposta.

Tudo o que fizer aqui requer os mesmos privilégios de que o SQL equivalente precisaria (CREATEROLE, superutilizador, ou ser proprietário do objeto, consoante a ação) — o OmniDB executa as instruções com as credenciais da ligação que está a usar. As três colunas podem ser redimensionadas arrastando a pequena pega no seu bordo direito; um duplo clique numa pega repõe essa coluna, e as larguras são memorizadas.

Coluna 1: Roles

A coluna Roles lista todas as roles do servidor, incluindo as roles incorporadas pg_*, ordenadas por nome. As roles que podem iniciar sessão (utilizadores) têm um ícone de uma só pessoa; as que não podem (grupos) têm um ícone de duas pessoas; os superutilizadores são assinalados com superutilizador e as roles cuja conta expirou com expirada. A primeira linha é sempre PUBLIC (ícone do globo) — não é uma role real, mas a pseudo-role a que todas as roles pertencem implicitamente, para que os privilégios concedidos a PUBLIC possam ser explorados e editados da mesma forma.

A caixa acima da lista filtra as roles por nome, e a lista pendente ao lado filtra-as por tipo: Todas as funções, Utilizadores (podem iniciar sessão), Grupos (sem início de sessão), Superutilizadores ou Expiradas.

Clique numa role para a pôr em foco; as outras colunas mostram então essa role. Por baixo da lista:

The Create Role dialog with the SQL preview

Clicar com o botão direito numa role (que não seja PUBLIC) oferece:

The context menu of a role

Coluna 2: associações

A segunda coluna está dividida em duas metades:

Em ambas as metades, as associações diretas são mostradas em texto normal e as indiretas (herdadas) em itálico com um ícone esbatido. Uma associação direta concedida WITH ADMIN OPTION é assinalada com (admin option); no PostgreSQL 16 e posteriores, (sem herança) e (sem SET) assinalam associações que não têm a opção INHERIT ou SET.

Coluna 3: objetos e privilégios efetivos

A terceira coluna, … — Objetos, é uma árvore de tudo aquilo sobre que a role em foco tem algum privilégio — os seus privilégios efetivos: as suas próprias concessões diretas mais tudo o que herda através das suas associações e através de PUBLIC. Começa com dois grupos, Bases de dados (todas as bases de dados do servidor) e Tablespaces; um nó é mostrado normalmente se a role tiver algum privilégio aí, e a cinzento caso contrário. A caixa no topo filtra as bases de dados e os tablespaces por nome e mantém o seu texto quando muda de role.

Expandir uma base de dados carrega os seus objetos através de uma ligação separada a essa base de dados (a base de dados ativa do próprio separador de ligação não muda): esquemas e, dentro de cada esquema, pastas para tabelas, vistas, sequências, funções, procedimentos, vistas materializadas, tipos e domínios; os foreign data wrappers e os servidores externos ficam diretamente por baixo da base de dados. Só são listados os objetos sobre os quais a role tem efetivamente algum privilégio (os esquemas de sistema são omitidos); um esquema mostrado a cinzento só está lá porque algo no seu interior está. Cada base de dados tem ainda duas pastas extra: Objetos próprios (n), que lista o que a role possui aí (até 1000 entradas), e Privilégios predefinidos, descritos abaixo. Se não houver absolutamente nada, a base de dados mostra Sem privilégios sobre nenhum objeto desta base de dados.

The Objects column expanded down to the tables

Editar privilégios

Clique com o botão direito numa base de dados, tablespace, esquema ou objeto e escolha Editar privilégios. O diálogo lista, como caixa de seleção, cada privilégio válido para esse tipo de objeto:

As caixas de seleção mostram o que a role detém diretamente:

The Edit Privileges dialog with the SQL preview

Com opção de concessão (grant option) aplica-se aos privilégios que conceder de novo nesse diálogo. Confirme com Guardar.

Para conceder algo sobre um objeto que ainda não está na árvore, use o + (Adicionar privilégio sobre objeto) por baixo da coluna: escolha o Tipo de objeto, depois a Base de dados (para tudo exceto bases de dados e tablespaces; por predefinição, a base de dados atual da ligação), o Esquema para objetos ao nível do esquema, o próprio Objeto (as funções são mostradas com a sua assinatura de argumentos), assinale os Privilégios e, opcionalmente, Com opção de concessão (grant option). Para tabelas, sequências, funções e procedimentos, a escolha Âmbito pode ser mudada de Objeto selecionado para Todas as … do esquema, com Conceder ou Revogar: o OmniDB executa então GRANT/REVOKE … ON ALL … IN SCHEMA, o que afeta os objetos que existem agora, não os criados mais tarde.

Selecionar PUBLIC na primeira coluna permite-lhe editar aquilo que está concedido ao próprio PUBLIC (GRANT … TO PUBLIC / REVOKE … FROM PUBLIC).

Privilégios predefinidos

A pasta Privilégios predefinidos de uma base de dados lista as entradas de ALTER DEFAULT PRIVILEGES que envolvem a role em foco, seja como beneficiária ou como role criadora. São a forma de cobrir os objetos criados no futuro. Clique com o botão direito na pasta para Adicionar privilégios predefinidos: escolha a role criadora (Para objetos criados por), o esquema (ou todos os esquemas), o tipo de objeto (tabelas, sequências, funções, tipos, esquemas) e os privilégios. Clique com o botão direito numa entrada existente para Editar privilégios (só as marcas que alterar são concedidas ou revogadas) ou Remover privilégios predefinidos.

Propriedade e quem tem acesso

The Who Has Access dialog

Pré-visualizar o SQL

Os diálogos para criar, alterar, renomear e clonar roles, adicionar associações, conceder ou editar privilégios, privilégios predefinidos e alterar proprietários têm uma caixa recolhível Mostrar SQL. Mostra as instruções exatas que os valores atuais do formulário executariam — construídas pelo mesmo código do servidor que a chamada real, nada é executado, as palavras-passe são mascaradas — e mantém-nas atualizadas à medida que o formulário muda. Copiar SQL copia-as.

Importante: confirmar um diálogo executa as instruções no servidor de imediato — não há forma de anular. Reveja-as primeiro com Mostrar SQL. Eliminar role, Remover associação e Remover privilégios predefinidos também pedem confirmação. Se o servidor rejeitar uma instrução, é mostrada a respetiva mensagem de erro.