Estamos tendo um servidor Linux multiusuário. Eu gostaria de dar a cada usuário a capacidade de criar e gerenciar bancos de dados à vontade, mas para manter as coisas sãs, force-os a que cada nome de banco de dados que eles criem comece com seu nome de usuário como prefixo. Por exemplo, o usuário joe
só teria permissão para criar bancos de dados como joe_app1
e, joe_app2
mas não app1
ou jack_app1
. Isso é possível no PostgreSQL? Ou existe outra maneira de separar namespaces para bancos de dados criados pelo usuário?
relate perguntas
-
Posso ativar o PITR depois que o banco de dados foi usado
-
Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo
-
Os procedimentos armazenados impedem a injeção de SQL?
-
Sequências Biológicas do UniProt no PostgreSQL
-
Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?
O PostgreSQL não permite que você faça isso dentro do PostgreSQL. Você não pode criar um banco de dados dentro de uma transação, portanto, as funções da linguagem procedural não podem criar bancos de dados ou descartar bancos de dados. Espero que algum dia isso seja corrigido, mas é a única parte do DDL que não funciona dentro de uma transação.
O que isso significa é que você precisa fazer isso de fora do banco de dados com um aplicativo separado que executa as verificações que você deseja executar. Algumas coisas importantes a ter em mente são:
Você provavelmente deseja ter um usuário dedicado (função com
login
,noinherit
) para o processo de criação do banco de dados.Você não deseja dar permissão para criar dbs aos usuários em geral.
O script deve criar o banco de dados e,
ALTER DATABASE ... OWNER TO ...
em seguida, garantir que o usuário tenha permissões totais para ele.