zoukankan      html  css  js  c++  java
  • postgresql 角色权限

    概要

    postgresql 默认的账户 postgres 权限太高, 当一个数据库服务上有多个项目的数据库时, 大家都通过 postgres 账户来连接数据库安全性太差.

    最好的方式是, 每个数据库有自己的账户, 该账户只能查看特定的数据库, 无法访问其他数据库.

    最近有几个项目, 开发时都是直接用 postgres 账户, 发布时, 由于安全性的要求, 无法再使用此帐户.
    因此, 需要创建新的不同帐户来连接不同的数据库, 调整过程中遇到的一些坑记录如下:

    数据库切换角色

    重新创建数据库

    这种情况, 一般是因为之前直接把表创建在了默认的 postgres 数据库中了.
    这是, 需要创建新的数据库和帐户, 并把数据迁移到新的数据库.

    1  # 创建新账户
    2  CREATE USER testuser WITH PASSWORD 'testpasswd';
    3  
    4  # 创建新数据库并将 OWNER 设置为新创建的帐户
    5  CREATE DATABASE testdb OWNER testuser;
    6  
    7  # 给新用户授权
    8  GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;
    

    创建数据库之后, 接着使用上面创建的 testuser 来创建 schematable
    这样, testuser 就有了对这些 schematable 访问的权限

    已有数据库

    对于已有的数据库, 其中的 schematable 之前是用 postgres 帐户创建的.
    这时, 先给新建的账户赋予数据库权限

    1  # 创建新账户
    2  CREATE USER testuser WITH PASSWORD 'testpasswd';
    3  
    4  # 将数据库 OWNER 设置为新创建的帐户
    5  ALTER DATABASE testdb OWNER TO testuser;
    6  
    7  # 给新用户授权
    8  GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;
    

    虽然给 testuser 账户赋予了数据库层的所有权限, 但是对其中的 schematable, 仍然没有权限.
    需要针对 schematable 再次授权

    1  # 赋予用户schema的权限
    2  GRANT ALL PRIVILEGES ON SCHEMA illuminant TO testuser;
    3  
    4  # 赋予schema下所有表的权限 
    5  GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA illuminant TO testuser;
    

    这样, 就可以用新账户访问新数据库了.

  • 相关阅读:
    Metronic最优秀的基于Bootstrap的响应式网站模版
    SMINT:单页网站的免費jQuery插件
    不做全栈开发工程师
    《劲道》课程笔记——教练对话
    windows 7环境下配置oracle 11g 客户端
    jsp+servlet+javabean (MVC)分页
    解析java中 hashcode()
    BeanUtils操作
    Dom4jApp.java 解析和创建XML
    dom4j
  • 原文地址:https://www.cnblogs.com/wang_yb/p/14262736.html
Copyright © 2011-2022 走看看