• 创建pgsql的数据库


    mkdir -p /var/lib/pgsql/data      //创建pgsql的数据库目录
    cd /var/lib/pgsql 
    chown postgres.postgres data     //改变目录的所属用户用组
    su  postgres                     //切换到postgres,不然初始化不
    initdb /var/lib/pgsql/data   //初始化数据库 提示错误就用下面这条命令
    This user must also own the server process.  
    The database cluster will be initialized with locale en_US.UTF-8.  
    fixing permissions on existing directory /var/lib/pgsql/data ... ok  
    creating directory /var/lib/pgsql/data/global ... ok  
    creating directory /var/lib/pgsql/data/pg_xlog ... ok  
    creating directory /var/lib/pgsql/data/pg_xlog/archive_status ... ok  
    creating directory /var/lib/pgsql/data/pg_clog ... ok  
    creating directory /var/lib/pgsql/data/pg_subtrans ... ok  
    creating directory /var/lib/pgsql/data/pg_twophase ... ok  
    creating directory /var/lib/pgsql/data/pg_multixact/members ... ok  
    creating directory /var/lib/pgsql/data/pg_multixact/offsets ... ok  
    creating directory /var/lib/pgsql/data/base ... ok  
    creating directory /var/lib/pgsql/data/base/1 ... ok  
    creating directory /var/lib/pgsql/data/pg_tblspc ... ok  
    selecting default max_connections ... 100  
    selecting default shared_buffers ... 1000  
    creating configuration files ... ok  
    creating template1 database in /var/lib/pgsql/data/base/1 ... ok  
    initializing pg_authid ... ok  
    Enter new superuser password:     //超级管理员密码  
    Enter it again:                   //确认密码  
    initdb: removing contents of data directory "/var/lib/pgsql/data"  
    这样就初始化就好了。
    listen_addresses = '*'     //监听所有ip的连接,默认是本机  
    port = 5432             //这个不开也行,默认就是5432端口  
    //    用pgadmin远程连接权限是要放大 listen_addresses = '*' 全部放开,当然也可以,设置局域网的IP段.
    # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD  
    # "local" is for Unix domain socket connections only  
    local   all         all                               trust  
    # IPv4 local connections:  
    host    all         all         127.0.0.1/32          md5  
    host    all         all         0.0.0.0/0             md5   // 所有IP和用户,密码对都可以连接  一般用户不用
    # IPv6 local connections:  
    host    all         all         ::1/128               md5 
    创建角色与用户
    CREATE ROLE 语法
    CREATE ROLE name [ [ WITH ] option [ ... ] ]
    where option can be:
    SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | CREATEUSER | NOCREATEUSER
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | CONNECTION LIMIT connlimit
    | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
    | VALID UNTIL 'timestamp'
    | IN ROLE role_name [, ...]
    | IN GROUP role_name [, ...]
    | ROLE role_name [, ...]
    | ADMIN role_name [, ...]
    | USER role_name [, ...]
    | SYSID uid
    创建david 角色和sandy 用户
    postgres=# CREATE ROLE david;  //默认不带LOGIN属性
    CREATE ROLE
    postgres=# CREATE USER sandy;  //默认具有LOGIN属性
    CREATE ROLE
    postgres=# du
    List of roles
    Role name | Attributes | Member of 
    -----------+------------------------------------------------+-----------
    david | Cannot login | {}
    postgres | Superuser, Create role, Create DB, Replication | {}
    sandy | | {}
    postgres=# 
    postgres=# SELECT rolname from pg_roles ;
    rolname 
    ----------
    postgres
    david
    sandy
    (3 rows)
    postgres=# SELECT usename from pg_user; //角色david 创建时没有分配login权限,所以没有创建用户
    usename 
    ----------
    postgres
    sandy
    (2 rows)
    postgres=# 
    1.2 验证LOGIN属性
    postgres@CS-DEV:~> psql -U david
    psql: FATAL: role "david" is not permitted to log in
    postgres@CS-DEV:~> psql -U sandy
    psql: FATAL: database "sandy" does not exist
    postgres@CS-DEV:~> psql -U sandy -d postgres
    psql (9.1.0)
    Type "help" for help.
    postgres=> dt
    No relations found.
    postgres=> 
    用户sandy 可以登录,角色david 不可以登录。
    1.3 修改david 的权限,增加LOGIN权限
    postgres=# ALTER ROLE david LOGIN ;
    ALTER ROLE
    postgres=# du
    List of roles
    Role name | Attributes | Member of 
    -----------+------------------------------------------------+-----------
    david | | {}
    postgres | Superuser, Create role, Create DB, Replication | {}
    sandy | | {}
    postgres=# SELECT rolname from pg_roles ;
    rolname 
    ----------
    postgres
    sandy
    david
    (3 rows)
    postgres=# SELECT usename from pg_user;  //给david 角色分配login权限,系统将自动创建同名用户david
    usename 
    ----------
    postgres
    sandy
    david
    (3 rows)
    postgres=# 
    1.4 再次验证LOGIN属性
    postgres@CS-DEV:~> psql -U david -d postgres
    psql (9.1.0)
    Type "help" for help.
    postgres=> du
    List of roles
    Role name | Attributes | Member of 
    -----------+------------------------------------------------+-----------
    david | | {}
    postgres | Superuser, Create role, Create DB, Replication | {}
    sandy | | {}
    postgres=> 
    david 现在也可以登录了。
    查看角色信息
    psql 终端可以用du 或du+ 查看,也可以查看系统表 select * from pg_roles;
    postgres=> du
    List of roles
    Role name | Attributes | Member of 
    -----------+------------------------------------------------+-----------
    david | Cannot login | {}
    postgres | Superuser, Create role, Create DB, Replication | {}
    sandy | | {}
    postgres=> du+
    List of roles
    Role name | Attributes | Member of | Description 
    -----------+------------------------------------------------+-----------+-------------
    david | Cannot login | {} | 
    postgres | Superuser, Create role, Create DB, Replication | {} | 
    sandy | | {} |
    postgres=> SELECT * from pg_roles;
    rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcatupdate | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolconfig | oid 
    ----------+----------+------------+---------------+-------------+--------------+-------------+----------------+--------------+-------------+---------------+-----------+-------
    postgres | t | t | t | t | t | t | t | -1 | ******** | | | 10
    david | f | t | f | f | f | f | f | -1 | ******** | | | 49438
    sandy | f | t | f | f | f | t | f | -1 | ******** | | | 49439
    (3 rows)
    postgres=>
    角色属性(Role Attributes)
    一个数据库角色可以有一系列属性,这些属性定义了他的权限。

    属性 说明
    login 只有具有 LOGIN 属性的角色可以用做数据库连接的初始角色名。
    superuser 数据库超级用户
    createdb 创建数据库权限
    createrole 允许其创建或删除其他普通的用户角色(超级用户除外)
    replication 做流复制的时候用到的一个用户属性,一般单独设定。
    password 在登录时要求指定密码时才会起作用,比如md5或者password模式,跟客户端的连接认证方式有关
    inherit 用户组对组员的一个继承标志,成员可以继承用户组的权限特性
    ... ...

    创建用户时赋予角色属性
    从pg_roles 表里查看到的信息,在上面创建的david 用户时,默认没有创建数据库等权限。 
    postgres@CS-DEV:~> psql -U david -d postgres 
    psql (9.1.0) 
    Type "help" for help. 
    postgres=> du 
    List of roles 
    Role name | Attributes | Member of 
    -----------+------------------------------------------------+----------- 
    david | | {} 
    postgres | Superuser, Create role, Create DB, Replication | {} 
    sandy | | {} 
    postgres=> CREATE DATABASE test; 
    ERROR: permission denied to create database 
    postgres=> 
    如果要在创建角色时就赋予角色一些属性,可以使用下面的方法。 
    首先切换到postgres 用户。 
    4.1 创建角色bella 并赋予其CREATEDB 的权限。 
    postgres=# CREATE ROLE bella CREATEDB ; 
    CREATE ROLE 
    postgres=# du 
    List of roles 
    Role name | Attributes | Member of 
    -----------+------------------------------------------------+----------- 
    bella | Create DB, Cannot login | {} 
    david | | {} 
    postgres | Superuser, Create role, Create DB, Replication | {} 
    sandy | | {} 
    postgres=# 
    4.2 创建角色renee 并赋予其创建数据库及带有密码登录的属性。 
    postgres=# CREATE ROLE renee CREATEDB PASSWORD 'abc123' LOGIN; 
    CREATE ROLE 
    postgres=# du 
    List of roles 
    Role name | Attributes | Member of 
    -----------+------------------------------------------------+----------- 
    bella | Create DB, Cannot login | {} 
    david | | {} 
    postgres | Superuser, Create role, Create DB, Replication | {} 
    renee | Create DB | {} 
    sandy | | {} 
    postgres=# 
    4.3 测试renee 角色 
    a. 登录 
    postgres@CS-DEV:~> psql -U renee -d postgres 
    psql (9.1.0) 
    Type "help" for help. 
    postgres=> 
    用renee 用户登录数据库,发现不需要输入密码既可登录,不符合实际情况。 
    b. 查找原因 
    在角色属性中关于password的说明,在登录时要求指定密码时才会起作用,比如md5或者password模式,跟客户端的连接认证方式有关。
    查看pg_hba.conf 文件,发现local 的METHOD 为trust,所以不需要输入密码。

    将local 的METHOD 更改为password,然后保存重启postgresql。
    c. 再次验证

    提示输入密码,输入正确密码后进入到数据库。
    d. 测试创建数据库

    创建成功。
    给已存在用户赋予各种权限
    使用ALTER ROLE 命令。
    ALTER ROLE 语法:
    ALTER ROLE name [ [ WITH ] option [ ... ] ]
    where option can be:
    SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | CREATEUSER | NOCREATEUSER
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | CONNECTION LIMIT connlimit
    | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
    | VALID UNTIL 'timestamp'
    ALTER ROLE name RENAME TO new_name
    ALTER ROLE name [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }
    ALTER ROLE name [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT
    ALTER ROLE name [ IN DATABASE database_name ] RESET configuration_parameter
    ALTER ROLE name [ IN DATABASE database_name ] RESET ALL
    5.1 赋予bella 登录权限
    a. 查看现在的角色属性
    postgres=# du
    List of roles
    Role name | Attributes | Member of 
    -----------+------------------------------------------------+-----------
    bella | Create DB, Cannot login | {}
    david | | {}
    postgres | Superuser, Create role, Create DB, Replication | {}
    renee | Create DB | {}
    sandy | | {}
    postgres=# 
    b. 赋予登录权限
    postgres=# ALTER ROLE bella WITH LOGIN;
    ALTER ROLE
    postgres=# du
    List of roles
    Role name | Attributes | Member of 
    -----------+------------------------------------------------+-----------
    bella | Create DB | {}
    david | | {}
    postgres | Superuser, Create role, Create DB, Replication | {}
    renee | Create DB | {}
    sandy | | {}
    postgres=# 
    5.2 赋予renee 创建角色的权限
    postgres=# ALTER ROLE renee WITH CREATEROLE;
    ALTER ROLE
    postgres=# du
    List of roles
    Role name | Attributes | Member of 
    -----------+------------------------------------------------+-----------
    bella | Create DB | {}
    david | | {}
    postgres | Superuser, Create role, Create DB, Replication | {}
    renee | Create role, Create DB | {}
    sandy | | {}
    postgres=# 
    5.3 赋予david 带密码登录权限
    postgres=# ALTER ROLE david WITH PASSWORD 'ufo456';
    ALTER ROLE
    postgres=#
    5.4 设置sandy 角色的有效期
    postgres=# ALTER ROLE sandy VALID UNTIL '2014-04-24';
    ALTER ROLE
    postgres=# du
    List of roles
    Role name | Attributes | Member of 
    -----------+------------------------------------------------+-----------
    bella | Create DB | {}
    david | | {}
    postgres | Superuser, Create role, Create DB, Replication | {}
    renee | Create role, Create DB | {}
    sandy | | {}
    postgres=# SELECT * from pg_roles ;
    rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcatupdate | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolconfig | oid 
    ----------+----------+------------+---------------+-------------+--------------+-------------+----------------+--------------+-------------+------------------------+-----------+-------
    postgres | t | t | t | t | t | t | t | -1 | ******** | | | 10
    bella | f | t | f | t | f | t | f | -1 | ******** | | | 49440
    renee | f | t | t | t | f | t | f | -1 | ******** | | | 49442
    david | f | t | f | f | f | t | f | -1 | ******** | | | 49438
    sandy | f | t | f | f | f | t | f | -1 | ******** | 2014-04-24 00:00:00+08 | | 49439
    (5 rows)
    postgres=#
    角色赋权/角色成员
    在系统的角色管理中,通常会把多个角色赋予一个组,这样在设置权限时只需给该组设置即可,撤销权限时也是从该组撤销。在PostgreSQL中,首先需要创建一个代表组的角色,之后再将该角色的membership 权限赋给独立的角色即可。
    6.1 创建组角色
    postgres=# CREATE ROLE father login nosuperuser nocreatedb nocreaterole noinherit encrypted password 'abc123';
    CREATE ROLE
    postgres=# du
    List of roles
    Role name | Attributes | Member of 
    -----------+------------------------------------------------+-----------
    bella | Create DB | {}
    david | | {}
    father | No inheritance | {}
    postgres | Superuser, Create role, Create DB, Replication | {}
    renee | Create role, Create DB | {}
    sandy | | {}
    postgres=#
    6.2 给father 角色赋予数据库test 连接权限和相关表的查询权限。
    postgres=# GRANT CONNECT ON DATABASE test to father;
    GRANT
    postgres=# c test renee
    You are now connected to database "test" as user "renee".
    test=> dt
    No relations found.
    test=> CREATE TABLE emp (
    test(> id serial,
    test(> name text);
    NOTICE: CREATE TABLE will create implicit sequence "emp_id_seq" for serial column "emp.id"
    CREATE TABLE
    test=> INSERT INTO emp (name) VALUES ('david'); 
    INSERT 0 1
    test=> INSERT INTO emp (name) VALUES ('sandy');
    INSERT 0 1
    test=> SELECT * from emp;
    id | name 
    ----+-------
    1 | david
    2 | sandy
    (2 rows)
    test=> dt
    List of relations
    Schema | Name | Type | Owner 
    --------+------+-------+-------
    public | emp | table | renee
    (1 row)
    test=> GRANT USAGE ON SCHEMA public to father;
    WARNING: no privileges were granted for "public"
    GRANT
    test=> GRANT SELECT on public.emp to father;
    GRANT
    test=> 
    6.3 创建成员角色
    test=> c postgres postgres
    You are now connected to database "postgres" as user "postgres".
    postgres=# CREATE ROLE son1 login nosuperuser nocreatedb nocreaterole inherit encrypted password 'abc123';
    CREATE ROLE
    postgres=# 
    这里创建了son1 角色,并开启inherit 属性。PostgreSQL 里的角色赋权是通过角色继承(INHERIT)的方式实现的。
    6.4 将father 角色赋给son1
    postgres=# GRANT father to son1;
    GRANT ROLE
    postgres=# 
    还有另一种方法,就是在创建用户的时候赋予角色权限。
    postgres=# CREATE ROLE son2 login nosuperuser nocreatedb nocreaterole inherit encrypted password 'abc123' in role father;
    CREATE ROLE
    postgres=# 
    6.5 测试son1 角色
    postgres=# c test son1
    You are now connected to database "test" as user "son1".
    test=> dt
    List of relations
    Schema | Name | Type | Owner 
    --------+------+-------+-------
    public | emp | table | renee
    (1 row)
    test=> SELECT * from emp;
    id | name 
    ----+-------
    1 | david
    2 | sandy
    (2 rows)
    test=> 
    用renee 角色新创建一张表,再次测试
    test=> c test renee
    You are now connected to database "test" as user "renee".
    test=> CREATE TABLE dept (
    test(> deptid integer,
    test(> deptname text);
    CREATE TABLE
    test=> INSERT INTO dept (deptid, deptname) values(1, 'ts');
    INSERT 0 1
    test=> c test son1
    You are now connected to database "test" as user "son1".
    test=> SELECT * from dept ;
    ERROR: permission denied for relation dept
    test=> 
    son1 角色只能查询emp 表的数据,而不能查询dept 表的数据,测试成功。
    6.6 查询角色组信息
    test=> c postgres postgres
    You are now connected to database "postgres" as user "postgres".
    postgres=# 
    postgres=# du
    List of roles
    Role name | Attributes | Member of 
    -----------+------------------------------------------------+-----------
    bella | Create DB | {}
    david | | {}
    father | No inheritance | {}
    postgres | Superuser, Create role, Create DB, Replication | {}
    renee | Create role, Create DB | {}
    sandy | | {}
    son1 | | {father}
    son2 | | {father}
    postgres=# 
    “ Member of ” 项表示son1 和son2 角色属于father 角色组。
    提示错误就用下面这条命令
    initdb -E UTF-8 -D /var/lib/pgsql/data --locale=en_US.UTF-8 -U postgres -W
    The files belonging to this database system will be owned by user "postgres".  
    修改/var/lib/pgsql/data/postgresql.conf
    修改/var/lib/pgsql/data/pg_hba.conf
    postgres -D /var/lib/pgsql/data    or    pg_ctl -D /var/lib/pgsql/data -l logfile start
    新开一个窗口
    cd /var/lib/pgsql
    su - postgres
    psql
    角色与用户的区别
    角色就相当于岗位:角色可以是经理,助理。
    用户就是具体的人:比如陈XX经理,朱XX助理,王XX助理。
    在PostgreSQL 里没有区分用户和角色的概念,"CREATE USER" 为 "CREATE ROLE" 的别名,这两个命令几乎是完全相同的,唯一的区别是"CREATE USER" 命令创建的用户默认带有LOGIN属性,而"CREATE ROLE" 命令创建的用户默认不带LOGIN属性(CREATE USER is equivalent to CREATE ROLE except that CREATE USER assumes LOGIN by default, while CREATE ROLE does not)。
    postgres=# Alter USER postgres WITH PASSWORD '***密码**';  //添加密码

  • 相关阅读:
    再谈《强化学习算法之DQN算法中的经验池的实现》 experience_replay_buffer模块的实现
    读《PyTorch + NumPy这么做会降低模型准确率,这是bug还是预期功能?》
    【观察网视频】 不是中国也不是社会主义,美国害怕的是别的东西
    经典视频分享:Machine Learning: A New ICE (Identification, Control, Estimation) Age ? —— 自动控制和人工智能的结合前景
    DQN2013代码尝试复现版(存在各种实现问题及Bug,个人尝试复现版,没有follow价值)
    新冠肺炎确诊病例和无症状感染者的区别及2+12隔离政策
    CMake安装
    matlab遍历文件夹及其子文件夹里面指定文件名的文件
    matlab矩阵复制函数
    怎样判断点落在矩形范围内判断某一点是否在几何图形内部
  • 原文地址:https://www.cnblogs.com/journeyIT/p/8259900.html
Copyright © 2020-2023  润新知