role

--创建角色
--Create Role role_name [not identified | identified by role_password];
SQL> create role role1 not identified ;
Role created
SQL> create role role2 identified by a123;
Role created
--修改用户默认角色
  alter user user_name
  default role role_name1,...,role_nameN | all [except role_name1,...,role_nameN] |None
  全局有效
--禁用、启用角色
  set role role_name1,...,role_nameN | all [except role_name1,...,role_nameN] |None
  session_roles,在当前session有效
--修改角色
--Alter Role role_name [not identified | identified by role_password];
SQL> alter role role1 identified by role1;
Role altered
SQL> alter role role2 not identified;
Role altered
--删除角色
SQL> Drop Role role1;
Role dropped


--查用户权限
SQL> Create Role Role1;
Role created
SQL> Grant Create Session,Create Table,Create View To Role1;
Grant succeeded
SQL> Grant Update On scott.dept To Role1;
Grant succeeded
SQL> Create User u Identified By u ;
User created
SQL> Grant Unlimited Tablespace To u;
Grant succeeded
SQL> Grant Select On scott.emp To u;
Grant succeeded
SQL> Grant role1 To u;
Grant succeeded
SQL> Select * From dba_sys_privs Where grantee='U';
GRANTEE                        PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
U                              UNLIMITED TABLESPACE                     NO
SQL> Select * From dba_tab_privs Where grantee='U';
GRANTEE                        OWNER                          TABLE_NAME                     GRANTOR                        PRIVILEGE                                GRANTABLE HIERARCHY
------------------------------ ------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --------- ---------
U                              SCOTT                          EMP                            SCOTT                          SELECT                                   NO        NO
SQL> Select * From Dba_Role_Privs Where grantee='U';
GRANTEE                        GRANTED_ROLE                   ADMIN_OPTION DEFAULT_ROLE
------------------------------ ------------------------------ ------------ ------------
U                              ROLE1                          NO           YES
SQL> Select * From Role_Sys_Privs Where Role='ROLE1';
ROLE                           PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
ROLE1                          CREATE SESSION                           NO
ROLE1                          CREATE TABLE                             NO
ROLE1                          CREATE VIEW                              NO
SQL> Select * From Role_TAB_Privs Where Role='ROLE1';
ROLE                           OWNER                          TABLE_NAME                     COLUMN_NAME                    PRIVILEGE                                GRANTABLE
------------------------------ ------------------------------ ------------------------------ ------------------------------ ---------------------------------------- ---------
ROLE1                          SCOTT                          DEPT                                                          UPDATE                                   NO

### 用户角色 (UserRole) 在 IT 系统中的作用 在 IT 系统中,`UserRole` 是一种常见的概念,用于定义用户的角色及其对应的权限范围。这种机制通常被集成到权限管理系统中,以实现细粒度的安全控制。 #### 1. UserRole 的基本概念 `UserRole` 表示用户与其所属角色之间的映射关系。通过这种方式,可以轻松地为不同类型的用户提供不同的访问权限。例如,在企业应用中,管理员可能拥有完全的系统控制权,而普通员工仅能查看特定的数据或执行有限的操作[^1]。 #### 2. 实现方式 以下是 `UserRole` 功能的一些常见实现方法: ##### 数据库表结构设计 为了支持 `UserRole` 功能,通常会在数据库中创建一张或多张关联表来存储用户和角色的关系。以下是一个简单的 SQL 表设计方案: ```sql CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50), password VARCHAR(100) ); CREATE TABLE roles ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) ); CREATE TABLE user_roles ( user_id INT, role_id INT, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (role_id) REFERENCES roles(id) ); ``` 在此方案中,`users` 表保存用户的登录信息;`roles` 表记录可用的角色名称;`user_roles` 则作为中间表,建立用户与角色的一对多关系[^1]。 ##### 集成到框架中 许多现代框架已经内置了对 `UserRole` 的支持。比如 Apache Shiro 和 Spring Security 提供了灵活的方式处理认证和授权逻辑。下面展示如何基于这些技术栈配置 `UserRole`: ###### 使用 Apache Shiro Shiro 中可以通过自定义 Realm 来加载用户的角色列表,并将其绑定至当前会话对象(即 Subject)。当验证某个资源是否可访问时,只需调用相应的 API 即可完成检查。 ```java public class MyRealm extends AuthorizingRealm { @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { String username = (String)principals.getPrimaryPrincipal(); SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); List<String> roles = getRolesByUsername(username); // 假设有一个方法可以从 DB 获取角色名 if (!roles.isEmpty()) { info.addRoles(roles); } return info; } private List<String> getRolesByUsername(String username){ // 查询数据库返回对应用户拥有的角色集合 return Arrays.asList("admin","editor"); } } ``` ###### 使用 Spring Security Spring Security 支持声明式的安全控制,允许开发者通过注解或者 XML 文件指定哪些 URL 或者方法需要某种角色才能访问。同时也可以扩展 UserDetailsService 接口来自定义加载过程。 ```java @Service public class CustomUserDetailService implements UserDetailsService { @Autowired private UserRepository userRepository; @Override public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException { Optional<UserEntity> optionalUser = userRepository.findByUsername(s); if(!optionalUser.isPresent()){ throw new UsernameNotFoundException("No such user found!"); } Collection<SimpleGrantedAuthority> authorities = optionalUser.get().getAuthorities() .stream() .map(authority -> new SimpleGrantedAuthority(authority.getName())) .collect(Collectors.toList()); return new org.springframework.security.core.userdetails.User( optionalUser.get().getUsername(), optionalUser.get().getPassword(),authorities ); } } ``` #### 3. 应用场景举例 - **电子商务网站**: 不同等级会员享受差异化服务; - **在线教育平台**: 教师能够发布课程资料,学生则限于观看已购买的内容; - **企业管理软件**: HR 只能看到人事档案相关模块,财务人员无法干涉其他部门事务。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值