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

  • 相关阅读:
    dfs模板
    24点
    个人阅读三
    个人阅读作业2:关于项目经历的心得
    代码复审
    Pair Project1:电梯控制程序
    第二次个人项目——阅读经典教材
    THE First Individual Project
    个人阅读作业3
    个人阅读作业2
  • 原文地址:https://www.cnblogs.com/chen-msg/p/13841748.html
Copyright © 2011-2022 走看看