1、实验环境
dc_db=>selectversion(); version --------------------------------------------------------------------------------------------------------------- Postgresql9.4.1onx86_64-unknown-linux-gnu,compiledbygcc(GCC)4.4.720120313(RedHat4.4.7-16),64-bit (1row)
2、现有用户
postgres:超级用户
usr_mall_api:usr_mall_api模式所有者。
3、收回public模式写权限
以超级用户执行
dc_db=#\c Youarenowconnectedtodatabase"dc_db"asuser"postgres". dc_db=#revokeCREATEonSCHEMApublicfrompublic; REVOKE
4、创建新用户
dc_db=#createuserreadonlywithpassword'123'; CREATEROLE
5、现有表的只读权限
对于模式的usage权限,表示允许查找模式中的对象。如果要查询一个模式中的表,实际上还需要有表的select权限。
dc_db=#\c Youarenowconnectedtodatabase"dc_db"asuser"postgres". dc_db=#grantusageonschemausr_mall_apitoreadonly; GRANT dc_db=#grantselectonalltablesinschemausr_mall_apitoreadonly; GRANT dc_db=#
6、新建表的只读权限
上面的sql命令只把现有表的读权限给了readonly,如果再创建新表,readonly用户还是不能读。需要把新建表的读权限也给readonly用户。
for user usr_mall_api,postgres表示usr_mall_api和postgres用户在sur_mall_api模式中新建的表,默认的只读权限赋给readonly。
dc_db=#alterdefaultprivilegesforuserusr_mall_api,postgresinschemausr_mall_apigrantselectontablestoreadonly; ALTERDEFAULTPRIVILEGES