permission manage database design

本文介绍了一种基于角色的权限管理系统的设计方案,包括角色、资源、操作等关键表的创建及序列生成,通过用户与角色的关联实现权限分配,并利用资源和操作表来明确权限范围。
  --权限许可      
  create table res_permission      
  (      
   roleid      INTEGER,      
   resourceid  varchar2(30),      
   operationid integer,      
   primary key(roleid,resourceid,operationid)      
  )      
       
       
  --角色定义      
  create table res_role      
  (      
   roleid      INTEGER,      
   rolename    varchar2(30),      
   roledesc    varchar2(100),      
   primary key(roleid)      
  )      
       
  --角色权限      
  create table res_userrole      
  (      
   roleid      INTEGER,      
   userid      varchar2(30),--用户名      
   primary key(roleid,userid)      
  )      
       
  --资源      
  create table res_resource      
  (      
   resourceid      varchar2(20),      
   resourcename    varchar2(30),      
   resourcedesc    varchar2(100),      
   primary key(resourceid)      
  )      
  --操作信息      
  create table res_operation      
  (      
   operationid      varchar2(20),      
   operationname    varchar2(30),      
   operationdesc    varchar2(100),      
   primary key(operationid)      
  )      
  --res_operation 表的序列号      
  create  sequence   res_operation_seq;      
  --res_role 表的序列      
  create  sequence   res_role_seq;      
  --建立soperationid与 sroleid两个序列分别用来产生Operation表与Role表的ID列      
  create sequence soperationid increment by 1 start with 1 nomaxvalue minvalue 1;       
  create sequence sroleid increment by 1 start with 1 nomaxvalue minvalue 1;   

 核心提示:--权限许可 create table res_permission ( roleid INTEGER , resourceidvarchar2(30), operationid integer , primary key (roleid,resourceid,operationid) ) --角色定义 create table res_role ( roleid INTEGER , rolenamevarchar2(30), roledescvarchar

 

--表设计的原理
--根据交叉法来匹配权限
--1:根据用户表中的用户id关联到res_userrole的userid,然后再关联到 res_role,查出用户对应的所有权限,存放到list中
--2:根据资源和操作查询出用户可以操作的所有许可 res_permission,存放到list中
--3:通过同时遍历两个list,查询出是否存在交叉,如果存在就是有权限,否则为无权限

 

### 3.1 检查用户权限配置 PostgreSQL 中出现 "permission denied for database" 错误通常是因为当前连接用户没有对目标数据库或表的访问权限。可以通过以下方式解决: - 创建一个具有登录权限的新角色,并授予其对特定数据库的全部权限: ```sql CREATE ROLE your_username WITH LOGIN PASSWORD 'your_password'; GRANT ALL PRIVILEGES ON DATABASE your_database_name TO your_username; ``` 这将确保新用户可以访问指定数据库[^3]。 - 如果问题与特定表有关,例如写入时提示 `psycopg2.errors.InsufficientPrivilege: permission denied for table`,则需要为该用户授予表级权限: ```sql GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE dapp_namemap TO your_username; ``` ### 3.2 使用具有管理员权限的账户操作 若当前用户不具备创建数据库或修改权限的能力,可使用具有超级用户权限的角色进行操作。例如,切换到具有 root 权限的用户创建数据库并指定所有者: ```bash sudo -u root createdb testdb --owner postgres ``` 其中 `root` 是系统中具有管理员权限的用户,`testdb` 是要创建的数据库名称,`postgres` 是数据库的所有者[^2]。 ### 3.3 调整连接权限和认证配置 检查 PostgreSQL 的 `pg_hba.conf` 文件,确保允许从远程主机通过密码方式进行连接。可以在该文件中添加如下规则: ``` host your_database_name your_username 0.0.0.0/0 md5 ``` 保存后重启 PostgreSQL 服务以使更改生效: ```bash sudo systemctl restart postgresql ``` ### 3.4 验证连接字符串和客户端代码 确保连接字符串中的用户名、密码、主机和数据库名正确无误。例如在 Python 中使用 `psycopg2` 连接 PostgreSQL 的示例: ```python import psycopg2 conn = psycopg2.connect( host="localhost", database="your_database_name", user="your_username", password="your_password" ) ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值