AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 4286
Accepted
pedrosanta
pedrosanta
Asked: 2011-08-04 11:01:21 +0800 CST2011-08-04 11:01:21 +0800 CST 2011-08-04 11:01:21 +0800 CST

Listar os privilégios do banco de dados usando o psql

  • 772

Estou no meio de uma migração de servidor de banco de dados e não consigo descobrir (depois de pesquisar e pesquisar aqui) como posso listar os privilégios do banco de dados (ou todos os privilégios no servidor) no PostgreSQL usando a psqlferramenta de linha de comando?

Estou no Ubuntu 11.04 e minha versão do PostgreSQL é 8.2.x.

postgresql ubuntu
  • 10 10 respostas
  • 777689 Views

10 respostas

  • Voted
  1. Best Answer
    DrColossos
    2011-08-05T00:24:23+08:002011-08-05T00:24:23+08:00
    postgres=> \l
                                      List of databases
       Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
    -----------+----------+----------+-------------+-------------+-----------------------
     postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
     template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
     template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
    

    Os documentos sobre Privilégios fornecem uma explicação de como interpretar a saída. Para privilégios específicos em uma tabela do banco de dados atual, use \z myTable.

    • 200
  2. Jack Douglas
    2011-08-05T07:59:53+08:002011-08-05T07:59:53+08:00

    talvez você queira listar usuários e seus privilégios para um banco de dados - não posso dizer com a pergunta:

    postgres=> \du
                                 List of roles
        Role name    |  Attributes  |                    Member of
    -----------------+--------------+------------------------------------------------
     dba             | Create role  | {util_user,helpdesk_user,helpdesk_admin}
     helpdesk_admin  | Cannot login | {helpdesk_user}
     helpdesk_user   | Cannot login | {helpdesk_reader}
     jack            |              | {helpdesk_admin}
     postgres        | Superuser    | {}
                     : Create role
                     : Create DB
    
    • 176
  3. Himanshu Chauhan
    2016-10-18T23:11:18+08:002016-10-18T23:11:18+08:00

    Você pode fazer isso seguindo:

    SELECT grantee, privilege_type 
    FROM information_schema.role_table_grants 
    WHERE table_name='mytable'
    

    Isso lhe dá este tipo de saída:

    mail=# select grantee, privilege_type from information_schema.role_table_grants where table_name='aliases';
       grantee    |  privilege_type
    --------------+-----------------
     mailreader   |  INSERT
     mailreader   |  SELECT
     mailreader   |  UPDATE
     mailreader   |  DELETE
     mailreader   |  TRUNCATE
     mailreader   |  REFERENCES
     mailreader   |  TRIGGER
    (7 rows)
    
    mail=#
    
    • 162
  4. Vao Tsun
    2017-08-26T01:04:26+08:002017-08-26T01:04:26+08:00

    Usando psqlmeta-comandos:

    https://www.postgresql.org/docs/current/static/app-psql.html

    Percorrer a página com Ctrl + F dá:

    \ddp [ pattern ] Lista as configurações de privilégio de acesso padrão.

    \dp [ pattern ]Lista tabelas, visualizações e sequências com seus privilégios de acesso associados.

    \l[+] [ pattern ]Liste os bancos de dados no servidor e mostre .... privilégios de acesso.

    Também mencionado acima, mas não encontrado com a palavra "privilégios" na página de manual:

    \du+para funções com login e \dg+para funções sem - terá um arquivo "Member of"onde você encontra funções concedidas a funções.

    Eu deliberadamente pulo privilégios de função e idioma aqui, encontrados no psqlmanual como mal manipulados (e se você usar esses privilégios, não virá aqui para um conselho). mesmo para tipos definidos pelo usuário, domínios e assim por diante - usar "+" após o meta-comando mostrará privilégios, se aplicável.


    Uma maneira um pouco extrema de verificar os privilégios é descartar o usuário na transação, por exemplo:

    s=# begin; drop user x;
    BEGIN
    Time: 0.124 ms
    ERROR:  role "x" cannot be dropped because some objects depend on it
    DETAIL:  privileges for type "SO dT"
    privileges for sequence so
    privileges for schema bin
    privileges for table xx
    privileges for table "csTest"
    privileges for table tmp_x
    privileges for table s1
    privileges for table test
    Time: 0.211 ms
    s=# rollback;
    ROLLBACK
    Time: 0.150 ms
    

    Quando a lista é maior que N, (pelo menos em 9.3), o aviso com a lista de privilégios é recolhido, mas você ainda pode encontrá-lo cheio nos logs...

    • 36
  5. Denys
    2018-04-07T02:55:52+08:002018-04-07T02:55:52+08:00

    Undercovers psql usa a consulta abaixo quando você emite o \ducomando.

    SELECT r.rolname, r.rolsuper, r.rolinherit,
      r.rolcreaterole, r.rolcreatedb, r.rolcanlogin,
      r.rolconnlimit, r.rolvaliduntil,
      ARRAY(SELECT b.rolname
            FROM pg_catalog.pg_auth_members m
            JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
            WHERE m.member = r.oid) as memberof
    , r.rolreplication
    , r.rolbypassrls
    FROM pg_catalog.pg_roles r
    WHERE r.rolname !~ '^pg_'
    ORDER BY 1;
    
    • 31
  6. Markofo
    2020-11-10T09:12:43+08:002020-11-10T09:12:43+08:00

    É assim que você pode listar todos os privilégios de uma função (concedido):

    SELECT grantor, grantee, table_schema, table_name, privilege_type
    FROM information_schema.table_privileges
    WHERE grantee = 'myuser'
    

    Vai resultar em:

     grantor  | grantee  | table_schema | table_name | privilege_type
    ----------+----------+--------------+------------+----------------
     postgres | myuser   | myapp        | employees  | INSERT
     postgres | myuser   | myapp        | employees  | SELECT
     postgres | myuser   | myapp        | employees  | UPDATE
     postgres | myuser   | myapp        | employees  | DELETE
    
    

    Funciona no PG 10

    • 22
  7. Adam Shostack
    2015-12-19T11:03:00+08:002015-12-19T11:03:00+08:00

    Uma etapa adicional (possivelmente óbvia) é se tornar o usuário postgres, caso contrário, você poderá obter erros sobre funções não existentes.

    sudo su - postgres
    psql -l
    

    ou

    psql
    postgres=> \l
    
    • 13
  8. stefannienhuis
    2020-03-05T08:27:06+08:002020-03-05T08:27:06+08:00

    Esta é a minha consulta composta por várias respostas sobre esta pergunta:

    SELECT grantee AS user, CONCAT(table_schema, '.', table_name) AS table, 
        CASE 
            WHEN COUNT(privilege_type) = 7 THEN 'ALL'
            ELSE ARRAY_TO_STRING(ARRAY_AGG(privilege_type), ', ')
        END AS grants
    FROM information_schema.role_table_grants
    GROUP BY table_name, table_schema, grantee;
    

    Isso resulta em algo assim:

    +------+--------------+----------------+
    | user |    table     |     grants     |
    +------+--------------+----------------+
    | foo  | schema.table | ALL            |
    | bar  | schema.table | SELECT, INSERT |
    +------+--------------+----------------+
    
    • 12
  9. Ricky Xu
    2020-06-22T06:49:24+08:002020-06-22T06:49:24+08:00

    Você pode inserir seguindo:

    SELECT * FROM pg_roles;
    

    e você vai conseguir

    rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig | oid
    

    talvez aqui você pense que há muitos papéis e, desta vez, você pode usar WHERE para selecionar qual papel deseja ver

    SELECT * FROM pg_roles WHERE rolname='your role name';
    

    Na verdade, você também pode simplesmente inserir

    \du
    

    e você verá todas as funções que criou em vez do padrão

    • 2
  10. milahu
    2021-12-15T07:28:32+08:002021-12-15T07:28:32+08:00

    listar proprietários de banco de dados

    select d.datname, r.rolname
    from pg_catalog.pg_database d, pg_catalog.pg_roles r
    where d.datdba = r.oid;
    

    docs: pg_database e pg_roles

    relacionado: teste para um privilégio específico:

    select has_database_privilege('dbname', 'CREATE');
    

    docs: has_database_privilege ( via )

    • 2

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?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve