• Postgres的用户认证


    我们先来讲讲postgresql的用户认证吧。

    我想我们有必要明白以下几个问题:

    第一、postgresql的用户和操作系统的用户没有任何直接的的关系。虽然在postgaresql的初始安装中,它会有一个内建的超级用户 postgres,而且它会建议你在操作系统中也新建一个用户postgres用它来连接数据库服务器和管理数据库集群,但是这并不是必需要的。在启动数据库服务器之前,你必需先要安装一个数据库集群,也是初始化一个数据库目录,也就是按这个命令来做:initdb ,这个命令会初始化一个数据库,它的用法如下:initdb -D 目录名,这样它就准备好了一个新的数据库目录,你现在可以用命令启动数据库了,postmaster -D 目录,或者是用pg_ctl start -D 目录名, 这个脚本来启动数据库用户,启动后你将进行第一次登录,注意因为在postgresql中预设是以ident sameuser这种方式来登录的(几种登录的方式我们在下面讲), 所以我们只有切换到我们预建的postgres 用户下才能登录进入数据库服务器。

    su postgres; psql template1; 这样就登录入数据库服务器。但是这个认证方式是由所在的数据库目录里的一个文件来pg_hba.conf来控制的。

    第二、postgres在默认是不接受tcp/ip连接的。有两种方式来控制它接受tcp/ip连接,一种是用启动参数 -i ,另一种方式是修改数据库目录里的文件:postgresql.conf中的参数,将tcpip_socket = false改为true port = 5432 前面的注释符号去掉。表示接受tcp/ip在5432的连接。

    第三、关于pg_hba.conf这个文件:

    这个文件是控制postgresql数据库服务器登录的关键。还记得我们第一条里所做的第一次登录吗?在那里我们是用的系统用户postgres进行登录的。为什么会这样呢?我不用这个系统用户登录不行吗?当然可以。我们可以看看psql这个客户端的登录语法:psql [-h 主机名] [-U 用户名] [-W 密码] 数据库名 。 如果省略主机名,系统会认为首先从本机连接,那么它会采用unix socket的方式来进行连接,如果指定-h参数它会以TCP/IP的方式来进行连接,-U是登录用户名,-W 指定用户密码,可以不写密码系统会提示你要输入密码的。

    所以当你启动后,可以使用如下命令进行登录(不需要切换到系统用户postgres)

    psql -h localhost -U postgres -W template1 当要你输入密码时,直接回接就行了。默认postgres用户是没有密码的。如果不能登录看我的配制文件:pg_hba.conf如果里面的关于登录的方法为ident sameuser的话,就会提示错误,当然不并不影响我们的试验。

    第四:pg_hba.conf这个文件的语法与登录认证的几种方式:当我们打开这个文件的时候会看到如下的字句:

    # TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD

    local all all trust

    host all all 127.0.0.1 255.255.255.255 trust

    ~

    它的写法上面已经有很清楚的介绍了,第一个域是登录类型,主要由本地登录和从别的主机上登录两种。第二个域表示要登录的数据库,第三个域是登录的用户,第四个是客户登录ip地址或者是网段,第四个则是了网掩码了,第五个就是认证的方式及认证方式的先项了。

    登录的类型我们可以写以下三种:local, host, hostssl ,

    认证方式有这几种:trusst (信任登录),指定的这种登录是不需要任何密码的。只要存在这种用户就可直接登录:local all all trust

    允许来来自本机任何合法的数据库用户登录所有的数据库(注意是数据库用户,而且是从本机登录的)。

    口令认证:这种认证方式有几种写种写法:password, crypt, md5,这三种方式中password是以明码方式传递密码的。crypt在postgresql7.2.x以下用得较多,因为它们没有实现md5的方式认证。如果你想采用密码认证,最好是采用md5的方式。

    Ident(这种称为映射认证),顾名思义,它会将数据库用户映射为某种用户。比如说:local all all indent sameuser,将会数据库用户与操作系统用户映射起来。如果大家用过WINDOWS的MS SQL SERVER肯定不会对这个感到陌生了。windows2000 server和ms sql server里的由windows2000 server管理数据库登录和这个就是一样的道理。因此在数据库的新安装中(RPM包安装中),你都会以一个新建的系统用户来试问数据库就是这个道理。如果是从网上下载自行编译的版本,它的默认方式是trust,可以不用新建系统用户postgres来登录入数据库服务器。但是为了有一个好的习惯,你应该还是新建一个系统用户postgres来管理你的数据库服务器。

    第五、postgresql用户的属性:

    postgresql的数据库用户可以使用SQL语言的CREATE USER 来建立的。如果需要建数立超级数据库用户,只需要这样来建立:CREATE USER 用户名 WITH PASSWORD CREATEUSER,这样就可建立一个超级数据库用户了,如果你想使用户有建立数据库的能力,那么你只需要将CREATEUSER 改为:CRATEDB就行了。如果只建普通用户就不需要带这两个选项了,至于普通用户的权限可以通过GRANT和REVOKE来管理。也就是说在 postgresql里预建的只有CREATEUSER和CREATEDB这两种。可以使用ALTER USER来修改数据库用户的属性。具体的命令用法请参考SQL手册。

  • 相关阅读:
    jedis异常:Could not get a resource from the pool
    redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resourc
    【redis】常见JedisConnectionException异常分析
    JAVA,字符串首字母转大写(高效率)
    Type handler was null on parameter mapping for property 'products'. It was either not specified and/or could not be found for the javaType / jdbcType combination specified
    java读取blob,clob转换为字符串
    mybatis对blob属性数据的处理
    mybatis读取oracle中blob
    jpa2.x的getOne()/findOne()/findById()的区别及使用
    IDEA如何导入导出出settings配置文件
  • 原文地址:https://www.cnblogs.com/newmanzhang/p/3195728.html
Copyright © 2020-2023  润新知