Eu sou novo no postgres (e nos sistemas de informações do banco de dados). Eu executei o seguinte script sql no meu banco de dados:
create table cities (
id serial primary key,
name text not null
);
create table reports (
id serial primary key,
cityid integer not null references cities(id),
reportdate date not null,
reporttext text not null
);
create user www with password 'www';
grant select on cities to www;
grant insert on cities to www;
grant delete on cities to www;
grant select on reports to www;
grant insert on reports to www;
grant delete on reports to www;
grant select on cities_id_seq to www;
grant insert on cities_id_seq to www;
grant delete on cities_id_seq to www;
grant select on reports_id_seq to www;
grant insert on reports_id_seq to www;
grant delete on reports_id_seq to www;
Quando, como o usuário www, tentando:
insert into cities (name) values ('London');
Estou tendo o erro a seguir:
ERROR: permission denied for sequence cities_id_seq
Eu entendo que o problema está no tipo de série. É por isso que concedo direitos de seleção, inserção e exclusão do * _id_seq para www. No entanto, isso não resolve o meu problema. o que estou perdendo?
sql
postgresql
permissions
auto-increment
Vampnik
fonte
fonte
Respostas:
Desde o PostgreSQL 8.2, você precisa usar:
UTILIZAÇÃO DE CONCESSÃO - Para seqüências, esse privilégio permite o uso das funções currval e nextval.
Também como apontado por @epic_fil nos comentários, você pode conceder permissões para todas as sequências no esquema com:
fonte
SELECT
necessário? Não deveUSAGE
cobrir o que é necessário?Como o @Phil tem um comentário recebendo muitas votações que podem não ser notadas, eu estou usando sua sintaxe para adicionar uma resposta que concederá permissões a um usuário para todas as sequências em um esquema (assumindo que o esquema é o padrão 'público' )
fonte
@Tom_Gerken, @epic_fil e @kupson estão bem corretos com suas instruções para conceder permissões para trabalhar com seqüências existentes. No entanto, o usuário NÃO obterá direitos de acesso a sequências criadas no futuro. Para fazer isso, você deve combinar a instrução GRANT com uma instrução ALTER DEFAULT PRIVILEGES, da seguinte maneira:
Isso funciona apenas no PostgreSQL 9+, é claro.
Isso será anexado aos privilégios padrão existentes, não os substituirá, portanto é bastante seguro nesse sentido.
fonte
Execute o seguinte comando no postgres.
faça o login no postgres:
O pgowner será o seu usuário do banco de dados.
fonte