Postgresql 赋予用户权限和撤销权限的实例
1、对数据库授权
postgresql授权某个数据库的权限给wang账号使该账号只能操作指定DB不能操作其他DB
alteruserwangsetdefault_transaction_read_only=on; grantallondatabasetesttowang; grantselectonalldatabasetesttowang; grantselectonalltablesinschemapublictowang;//起作用的是这句要进入数据库test操作,在那个db环境执行就授哪个db的权
配置权限
ve=#grantallonschemapublictofoo; ve=#grantselect,insert,update,deleteontesttofoo; ve=#grantselect,insert,update,deleteonpublic.testtofoo;
对表授权
撤销授权
撤销对数据库授权
revokeallondatabasecompanyfromwang;#撤销用户wang对数据库company的所有权限 revokeselectonalltablesinschemapublicfromwang;
撤销对表授权
对当前库中所有表去掉public的所有访问权限,为了确保除了所有者之外的洽谈用户不能操作这些表。
lyy=#revokeallontest1frompublic; REVOKE lyy=#revokeallontest2frompublic; REVOKE
去掉对pg_class的访问权限,为了确保yy用户不能看到所有表名的列表。
lyy=#revokeallonpg_classfrompublic; REVOKE lyy=#revokeallonpg_classfromyy; REVOKE
添加yy用户对test1表的所属关系,确保yy用户对test1表有权限操作
lyy=#ALTERTABLEtest1OWNERTOyy; lyy=#\q
用户管理
/*赋给用户表的所有权限*/ GRANTALLONtablenameTOuser; /*赋给用户数据库的所有权限*/ GRANTALLPRIVILEGESONDATABASEdbnameTOdbuser; /*撤销用户权限*/ REVOKEprivilegesONtablenameFROMuser;
数据库操作
/*创建数据库*/ createdatabasedbname; /*删除数据库*/ dropdatabasedbname;
表操作
/*增加让主键自增的权限*/ grantallonsequencetablename_keyname_seqtowebuser; /*重命名一个表*/ altertable[表名A]renameto[表名B]; /*删除一个表*/ droptable[表名]; /*在已有的表里添加字段*/ altertable[表名]addcolumn[字段名][类型]; /*删除表中的字段*/ altertable[表名]dropcolumn[字段名]; /*重命名一个字段*/ altertable[表名]renamecolumn[字段名A]to[字段名B]; /*给一个字段设置缺省值*/ altertable[表名]altercolumn[字段名]setdefault[新的默认值]; /*去除缺省值*/ altertable[表名]altercolumn[字段名]dropdefault; /*插入数据*/ insertinto表名([字段名m],[字段名n],......)values([列m的值],[列n的值],......); /*修改数据*/ update[表名]set[目标字段名]=[目标值]where...; /*删除数据*/ deletefrom[表名]where...; /*删除表*/ deletefrom[表名]; /*查询*/ SELECT*FROMdbnameWHERE...; /*创建表*/ createtable( [字段名1][类型1]primarykey,
参考
创建用户和数据库
创建用户
postgres=#createuserusernamewithpassword'****';
创建数据库
postgres=#createdatabasedbtestownerusername;--创建数据库指定所属者
将数据库得权限,全部赋给某个用户
postgres=#grantallondatabasedbtesttousername;--将dbtest所有权限赋值给username
导入整个数据库
psql-Uusernamedatabasename常见报错:
1、切换yy用户失败
lyy=#\c-yy FATAL:Peerauthenticationfailedforuser"yy" Previousconnectionkept2、用户yy连接lyyku会报错
psql-E-Uyy-dlyy Passwordforuseryy: psql:FATAL:permissiondeniedfordatabase"lyy" DETAIL:UserdoesnothaveCONNECTprivilege.原因:没有connect权限,那么就授予用户yy对数据库lyy的访问权限
解决办法:
#grantconnectondatabaselyytoyy;以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。