zoukankan      html  css  js  c++  java
  • postgre 用户权限管理

    PostgreSQL 用户和权限管理

    创建
    CREATE ROLE rolename;
    CREATE USER username;
    CREATE USER和CREATE ROLE的区别在于,CREATE USER指令创建的用户默认是有登录权限的,而CREATE ROLE没有。

    创建用户时设定用户属性

    基本语法格式
    CREATE ROLE role_name WITH optional_permissions;
    示例:在创建用户时设定登录权限。
    CREATE ROLE username WITH LOGIN;
    可以通过h CREATE ROLE指令查看全部可设置的管理权限


    修改用户属性
    修改权限的命令格式
    ALTER ROLE username WITH attribute_options;
    例如:可通过以下方式禁止用户登录
    ALTER ROLE username WITH NOLOGIN;

    设置访问权限
    语法格式如下:
    GRANT permission_type ON table_name TO role_name;

    示例
    GRANT UPDATE ON demo TO demo_role; --赋予demo_role demo表的update权限
    GRANT SELECT ON ALL TABLES IN SCHEMA PUBLIC to demo_role; --赋予demo_role所有表的SELECT权限

    特殊符号:ALL代表所访问权限,PUBLIC代表所有用户
    GRANT ALL ON demo TO demo_role; --赋给用户所有权限 但是不能修改表结构,也不能删除表
    GRANT SELECT ON demo TO PUBLIC; --将SELECT权限赋给所有用户

    z或dp指令显示用户访问权限。
    h GRANT显示所有可设置的访问权限

    撤销用户访问权限
    语法格式如下:
    REVOKE permission_type ON table_name FROM user_name;
    其中permission_type和table_name含义与GRANT指令中相同。

    用户组
    在postgres中用户实际上是role,同时组也是role。 包含其他role的role就是组。

    创建组示例:
    CREATE ROLE temporary_users;
    GRANT temporary_users TO demo_role;
    GRANT temporary_users TO test_user;

    切换ROLE
    SET ROLE role_name; --切换到role_name用户
    RESET ROLE; --切换回最初的role


    INHERIT权限:该属性使组成员拥有组的所有权限
    ALTER ROLE test_user INHERIT;

    删除用户和组
    删除用户和组很简单:

    DROP ROLE role_name;
    DROP ROLE IF EXISTS role_name;

    应用

    create user zabbix ;
    create database zabbix owner zabbix;
    alter user zabbix password zabbix;
    grant all on DATABASE zabbix to zabbix;

    COMMENT ON DATABASE zabbix is 'used for  zabbix data store'

    参考:https://www.cnblogs.com/zhangeamon/p/8990232.html

    https://www.cnblogs.com/lottu/p/12916046.html

    目录:

      一、在默认配置条件下,本机访问PostgreSQL

      二、创建新用户来访问PostgreSQL

      三、最简单的做法

      四、开启远程访问

    一、在默认配置条件下,本机访问PostgreSQL

    切换到Linux用户postgres,然后执行psql:

    $ su - postgres

    Last login: Wed Mar 1 13:16:48 CST 2017 on pts/1
    -bash-4.2$ psql

    psql (9.2.18)
    Type "help" for help.

    postgres=#

    此时就在数据库postgres中了。

    使用 psql -d [databasename] 可登录其他数据库。

    注意:执行psql命令时,必须确认已配置postgresql的环境变量。

    二、创建新用户来访问PostgreSQL

    1、如上所述,先切换到Linux用户postgres,并执行psql:

    $ su - postgres

    -bash-4.2$ psql

    postgres=#

    现在位于数据库提示符下。

    2、创建数据库新用户,如 dbuser:

    postgres=# CREATE USER dbuser WITH PASSWORD '*****';

    注意:

    1. 语句要以分号结尾。
    2. 密码要用单引号括起来。

    3、创建用户数据库,如exampledb:

    postgres=# CREATE DATABASE exampledb OWNER dbuser;

    4、将exampledb数据库的所有权限都赋予dbuser:

    postgres=# GRANT ALL PRIVILEGES ON DATABASE exampledb TO dbuser;

    5、使用命令 q 退出psql:

    postgres=# q

    6、创建Linux普通用户,与刚才新建的数据库用户同名,如 dbuser:

    $ sudo adduser dbuser

    $ sudo passwd dbuser

    7、以dbuser的身份连接数据库exampledb:

    $ su - dbuser

    Password: 
    Last login: Wed Mar 1 11:52:07 CST 2017 on pts/

    [dbuser@master ~]$ psql -d exampledb

     三、最简单的做法

    以你的普通Linux用户名,在数据库中创建同名的用户和数据库,如xxf,然后就可以本机直接连接到数据库xxf了。

    ~> su - postgres
    Password: 
    Last login: Wed Mar 1 13:19:02 CST 2017 on pts/1
    -bash-4.2$ psql
    psql (9.2.18)
    Type "help" for help.

    postgres=# create user xxf with password '******';
    CREATE ROLE
    postgres=# create database xxf owner xxf;
    CREATE DATABASE
    postgres=# grant all privileges on database xxf to xxf;
    GRANT
    postgres=# q
    -bash-4.2$ exit
    logout
    ~> psql
    psql (9.2.18)
    Type "help" for help.

    xxf=>

    至此,就在数据库xxf中了。 

    四、开启远程访问

    1、编辑配置文件

    文件:postgresql.conf

    位置:/var/lib/pgsql/data/postgresql.conf

    添加/修改:在所有IP地址上监听,从而允许远程连接到数据库服务器:

    listening_address: '*'

    文件:pg_hba.conf

    位置:/var/lib/pgsql/data/pg_hba.conf

    添加/修改:允许任意用户从任意机器上以密码方式访问数据库,把下行添加为第一条规则:

    host    all             all             0.0.0.0/0               md5

    2、重启数据库服务:

    $ sudo systemctl restart postgresql

    3、此后即可从其它机器上登录,例如用Navicat for PostgreSQL:

    主机名或IP: 172.*.*.*

    端口:          5432

    初始数据库: xxf

    用户:          xxf

    密码:          ******  (数据库用户xxf的密码,不是Linux用户xxf的密码)

    https://www.cnblogs.com/zhangeamon/p/8990232.html

  • 相关阅读:
    golang 数据结构 优先队列(堆)
    leetcode刷题笔记5210题 球会落何处
    leetcode刷题笔记5638题 吃苹果的最大数目
    leetcode刷题笔记5637题 判断字符串的两半是否相似
    剑指 Offer 28. 对称的二叉树
    剑指 Offer 27. 二叉树的镜像
    剑指 Offer 26. 树的子结构
    剑指 Offer 25. 合并两个排序的链表
    剑指 Offer 24. 反转链表
    剑指 Offer 22. 链表中倒数第k个节点
  • 原文地址:https://www.cnblogs.com/chen-msg/p/13841748.html
Copyright © 2011-2022 走看看