如何使用不同于“ postgres”的用户名登录PostgreSQL,以及如何加密特定列?

时间:2019-05-15 09:38:23

标签: postgresql authentication encryption

我绝对不是PostgreSQL的新手。我有以下疑问:

  1. 我能够使用

    登录到PostgreSQL
    sudo -u postgres psql postgres
    

    我创建了一个test_db数据库,并在其中创建了一个名为test_tbl的表。我还创建了一个用户test,并为其提供了以下特权:

    GRANT CONNECT ON DATABASE test_db TO test;
    GRANT SELECT, INSERT, UPDATE, DELETE ON test_tbl TO test;
    

    如何以test_db用户身份登录test数据库?我只能以postgres身份登录。如果尝试以test身份登录,则会出现以下错误-

        ubuntu@ip-10-81-1-44:~$ psql -U test -d test_db
        psql: FATAL:  Peer authentication failed for user "test"
  1. 如何仅针对用户test_tbl加密表test中的特定列?

2 个答案:

答案 0 :(得分:0)

您无需sudo更改用户,可以使用-U标志在连接时指定,例如:

psql -U test -d test_db

这将尝试以用户test_db的身份将您连接到数据库test,如果需要输入密码,则会提示您,此处列出了其他标志,例如主机,端口等

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

答案 1 :(得分:0)

  1. 您将必须在pg_hba.conf中创建一个条目,以允许用户进入数据库。不要忘记重新加载PostgreSQL。

    阅读the documentation about client authentication了解更多信息。

  2. 要加密列,您需要执行加密和解密的应用程序代码。

    也许您可以获得列特权:

    GRANT SELECT ON test_tbl TO test;
    GRANT SELECT (col1, col2, ...) ON test_tbl TO PUBLIC;
    

    在这里列出除要隐藏的列以外的所有列。 然后,只有用户test才能SELECT该列。

    另一种方法是仅将SELECT限制为test,并向其他人提供一个视图,该视图显示除隐藏列之外的所有内容。