5-对象的访问权限

对象的访问权限知识点

对象的分类

在数据库中,数据库的表、索引、视图、缺省值、规则、触发器等等、都可以被称为数据库对象,其中对象主要分为两类

1、模式(schema)对象:模式对象可以理解为一个存储目录、包含视图、索引、数据类型、函数和操作符等。也就是放在模式下的对象,都被叫做模式对象

2、非模式对象:其他的数据库对象、如数据库、表空间、用户

对象访问权限概述

1、对象都会有owner(所有者),所有者一般是对象的创建者,但所有者是可以被改变的;如使用root用户创建了一个目录,该目录当前的所有者是root,当然还可以使用chown命令来将所有者改为kingbase

2、初始转态下,只有所有者(或者超级用户)呢个够对改对象执行任何操作

3、其他用户和角色想要使用该对象,需要被授予相关的权限

定义访问权限(GRANT 权限 ON 对象类型 对象名 TO 用户/角色)

定义访问权限,相当与给予某个用户或角色权限:记住GRANT 权限 ON 对象类型 对象名 TO 用户/角色,即给用户/角色授予针对某个对象的某种权限

授予权限主要是使用GRANT来授权,但不同的对象类型支持的权限类型是有差异的

1、针对数据库的授权

在此之前,我们应该先明白数据库具有什么权限,才能为数据库进行正确的授权

语法:GRANT [CREATE | CONNECT | TEMPORARY | TEMP |…| ALL [PRIVILEGES] ]

ON DATABASE database_name;给哪个数据库权限

TO role_specification;给哪个用户

权限描述
CRETAE在数据库下创建对象的权限
CONNECT连接数据库的权限
TEMPORARY在数据库下创建临时表
TEMP在数据库下创建临时表

2、针对模式的授权

GRANT [ CREATE | USAGE |…| ALL [PRIVILEGES] ]

ON SCHEMA schema_name;给哪个模式授权

TO role_specification;给哪个用户授权

权限描述
CREATE在这个模式下可以再创建对象
USAGE因为模式相当与一个文件夹,当有了usage权限后就可以进入该文件夹内

3、针对表空间授权

GRANT [ CREATE | ALL [ PRIVILEGES ] ]

ON TABLESPACE tablespace_name

TO role_specification

4、针对表的授权

GRANT [ SELECT | INSERT | UPDATE | TRUNCATE | REFERENCES | TRIGGER | DELETE |…| ALL [PRIVILEGES]]

ON { [ TABLE ] table_name

​ | ALL TABLES IN SCHEMA schema_name }

TO role_specification

权限描述
SELECT查询
INSERT插入
UPDATE更新
TRUNCATE(truncate)截断,快速删除表中的所有数据
REFERENCES(references)外键约束,在表中创建一个字段
TRIGGER(trigger)触发器
EDLETE删除

5、针对列的授权

GRANT { [ SELECT | INSERT | UPDATE | REFERNCES] ( column_name […] ) […] | ALL [PRIVILEGES] ( colume_name […] ) }

ON [ TABLE ] table_name

TO role_specification

6、针对序列的授权

GRANT { [ USAGE | SELECT | UPDATE ] … [ ALL [PRIVILEGES ]]}

ON { SEQUENCE sequence_name

| ALL SEQUENCES IN SCHEMA schema_name }

TO role_specification

7、针对函数的授权

GRANT { EXECUTE | ALL [PRIVILEGES ] }

ON { FUNCTION function_name ( [ argmode [arg_name] arg_type ] ) | ALL FUNCTIONS IN SCHEMA schema_name }

TO role_specfication

移除访问权限(REVOKE 权限 ON 对象类型 对象名 TO 用户/角色)

移除访问权限,就是针对某个用户或角色去除它的权限,记住:REVOKE 权限 ON 对象类型 对象名 TO 用户/角色,即给用户/角色去除针对某个对象的某种权限

1、针对数据库的授权

REVOKE [ GRANT OPTION FOR ] [CREATE | CONNECT | TEMPORARY | TEMP |…| ALL [PRIVILEGES] ]

ON DATABASE database_name;给哪个数据库权限

FROM { [ GROUP ] role_name | PUBLIC } […] [ CASCADE | RESTRICT ]

2、针对模式授权

REVOKE [ GRANT OPTION FOR ] [ CREATE | USAGE |…| ALL [PRIVILEGES] ]

ON SCHEMA schema_name;给哪个模式授权

FROM { [ GROUP ] role_name | PUBLIC } […] [ CASCADE | RESTRICT ]

3、针对表空间授权

REVOKE [ GRANT OPTION FOR ] [ CREATE | ALL [ PRIVILEGES ] ]

ON TABLESPACE tablespace_name

FROM { [ GROUP ] role_name | PUBLIC } […] [ CASCADE | RESTRICT ]

4、针对表授权

REVOKE [ GRANT OPTION FOR ] [ SELECT | INSERT | UPDATE | TRUNCATE | REFERENCES | TRIGGER | DELETE |…| ALL [PRIVILEGES]]

ON { [ TABLE ] table_name

​ | ALL TABLES IN SCHEMA schema_name }

FROM { [ GROUP ] role_name | PUBLIC } […] [ CASCADE | RESTRICT ]

5、针对列的授权

REVOKE [ GRANT OPTION FOR ] { [ SELECT | INSERT | UPDATE | REFERNCES] ( column_name […] ) […] | ALL [PRIVILEGES] ( colume_name […] ) }

ON [ TABLE ] table_name

FROM { [ GROUP ] role_name | PUBLIC } […] [ CASCADE | RESTRICT ]

6、针对序列授权

REVOKE [ GRANT OPTION FOR ] { [ USAGE | SELECT | UPDATE ] … [ ALL [PRIVILEGES ]]}

ON { SEQUENCE sequence_name

| ALL SEQUENCES IN SCHEMA schema_name }

FROM { [ GROUP ] role_name | PUBLIC } […] [ CASCADE | RESTRICT ]

7、针对函数授权

REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [PRIVILEGES ] }

ON { FUNCTION function_name ( [ argmode [arg_name] arg_type ] ) | ALL FUNCTIONS IN SCHEMA schema_name }

TO role_specfication

权限描述符

符号全称解释
aINSERT插入,针对表或视图进行
rSELECT查询,针对表或视图进行
wUPDATE更新,针对表或视图进行
dDELECT删除,针对表或视图进行
DTRUNCATE清空记录,针对表
xREFERENCES参照引用,针对表
tTRIGGER创建触发器,针对表
XEXECUTE执行,针对存储过程(pl/sql对象)
UUSAGE使用权,针对模式,可以进入到模式下
CCREATE创建对象,针对模式或数据库
cCONNECT创建连接,针对数据库
TTEMPORARY创建临时表,针对数据库

如"user01=ar*/SYSTEM"

上述内容对应的是[被授权用户]=权限明细[*]/授权用户,其中[被授权用户]是user01

ar表示INSERT和SELECT,r*表示user01拥有r(SELECT)权限的转授权,SYSTEM说明user01的ar*权限是来自与SYSTEM用户的授权

"*"表示被授权用户拥有该权限的转授权(用于级联授权)

实验1:查看对象访问权限的主要方式

图形化界面查看权限

查看system对数据库的对象权限,右键[system]用户,点击[编辑用户],点击[对象权限]即可查看全部权限

image-20241030112301463

通过"ksql元命令"来查看权限

查看数据库下的权限

登录system用户查看system对数据库的存储权限,可以使用"\l"来查看权限、

test=# \l
                                  数据库列表
   名称    | 拥有者 | 字元编码 |  校对规则   |    Ctype    |     存取权限      
-----------+--------+----------+-------------+-------------+-------------------
 kingbase  | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 security  | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 template0 | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/system        +
           |        |          |             |             | system=CTc/system
 template1 | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/system        +
           |        |          |             |             | system=CTc/system
 test      | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
(5 行记录)

可以看到存储权限那一列中,就采用了权限描述符来描述权限的具体信息

如"system=CTc/system",其表示有system授予system权限,C允许创建数据库的权限,T允许创建临时表的权限,c允许连接的权限

查看模式下的权限

可以使用元命令"\dn+",可以从存储权限中看到权限描述符

如sso=UC/system;表示有system用户授予sso,U表示sso用户可以进入到模式下,C表示sso用户可以在模式下创建对象

test=# \dn+
                             架构模式列表
       名称       | 拥有者 |     存取权限     |          描述          
------------------+--------+------------------+------------------------
 anon             | system | system=UC/system+| 
                  |        | sso=UC/system    | 
 dbms_sql         | system |                  | 
 public           | system | system=UC/system+| standard public schema
                  |        | =UC/system       | 
 src_restrict     | system | system=UC/system+| 
                  |        | sso=UC/system    | 
 sysaudit         | system | system=UC/system+| 
                  |        | sso=UC/system   +| 
                  |        | sao=UC/system   +| 
                  |        | =UC/system       | 
 sysmac           | system | system=UC/system+| 
                  |        | sso=UC/system   +| 
                  |        | =U/system        | 
 xlog_record_read | system |                  | 
(7 行记录)

查看表下的权限

使用元命令"\dp"可以查看表的信息

test=# \dp
                                     存取权限
 架构模式 |          名称           | 类型 |       存取权限        | 列特权 | 策略 
----------+-------------------------+------+-----------------------+--------+------
 public   | sys_stat_statements     | 视图 | system=arwdDxt/system+|        | 
          |                         |      | =r/system             |        | 
 public   | sys_stat_statements_all | 视图 | system=arwdDxt/system+|        | 
          |                         |      | =r/system             |        | 
(2 行记录)

1、使用system用户登录test数据库

test=# \conninfo
以用户 "system" 的身份,通过套接字"/tmp"在端口"54321"连接到数据库 "test"

2、创建user01用户

test=# create user user01;
test=# alter user user01 password 'kingbase'
test-# ;									//修改user01的密码
ALTER ROLE

3、在public模式下创建t01表(字段为id和name,类型分别为int和text)

test=# create table public.t01 (id int,name text);
CREATE TABLE

4、向t01表中插入数据

test=# insert INTO public.t01 values (100,'a'),(200,'b');
INSERT 0 2
test=# select * from public.t01 
test-# ;
 id  | name 
-----+------
 100 | a
 200 | b
(2 行记录)

5、授权user01用户可查询t01表(第一行数据为100,‘a’;200,‘b’)

test=# grant SELECT on public.t01 TO user01;
GRANT
test=# \c - user01
您现在已经连接到数据库 "test",用户 "user01".
test=> select * from public.t01 ;
 id  | name 
-----+------
 100 | a
 200 | b
(2 行记录)

6、查看授权结果

test=# \dp public.t01 
                             存取权限
 架构模式 | 名称 |  类型  |       存取权限        | 列特权 | 策略 
----------+------+--------+-----------------------+--------+------
 public   | t01  | 数据表 | system=arwdDxt/system+|        | 
          |      |        | user01=r/system       |        | 
(1 行记录)

通过"数据字典"查看访问权限

数据字典是将数据库系统的信息组织到表中统一管理,也可称之数据字典表SystemCatalogTable,KES中的数据字典组织到Schema中

就是将数据库的全部信息全部都放在一张表内,以供我们查询,而这种表就被称为数据字典(类似与密码字典)

但是这种方法难度较大,需要记忆较多数据字典的视图以及其对应的字段

通过权限查询函数来查看访问权限

通过使用权限查询函数。来观察返回值是true还是flase

实验2:对象所有权限实验

查看表的所有者

使用"\dt+ table_name"可以查看表的拥有者

test=# \dt+ 
                     关联列表
 架构模式 | 名称 |  类型  | 拥有者 | 大小  | 描述 
----------+------+--------+--------+-------+------
 public   | t01  | 数据表 | system | 16 kB | 
 public   | t02  | 数据表 | user02 | 16 kB | 
(2 行记录)

验证对象的创建者默认就是对象的所有者

创建t02表

1、使用system用户身份登录test数据库

test=# \conninfo                                                                                
以用户 "system" 的身份,通过套接字"/tmp"在端口"54321"连接到数据库 "test"

2、在public模式中创建t02表

test=# create table public.t02 (id int,name text);
CREATE TABLE

查看t02的所有者

test=# \dt+ public.t02 
                       关联列表
 架构模式 | 名称 |  类型  | 拥有者 |    大小    | 描述 
----------+------+--------+--------+------------+------
 public   | t02  | 数据表 | system | 8192 bytes | 
(1 行记录)

可以看到我们有system用户创建的t02表这个对象,那么t02表就是属于system用户的

改变对象的所有者

创建user02用户;查看t02表的所有者

test=# create user user02;
CREATE ROLE
test=# alter user user02 password 'kingbase';
ALTER ROLE
test=# \dt+ t02
                       关联列表
 架构模式 | 名称 |  类型  | 拥有者 |    大小    | 描述 
----------+------+--------+--------+------------+------
 public   | t02  | 数据表 | system | 8192 bytes | 
(1 行记录)

将t02表的拥有者修改为user02;查看t02表的所有者

test=# alter table public.t02 owner to user02;
ALTER TABLE
test=# \dt+ public.t02 
                       关联列表
 架构模式 | 名称 |  类型  | 拥有者 |    大小    | 描述 
----------+------+--------+--------+------------+------
 public   | t02  | 数据表 | user02 | 8192 bytes | 

可以看到经过我们修改之后,public模式下的t02表的拥有着从system更改到user02上

拥有者在对象上的特殊权限不能被授予或撤销

像DROP、GRANT、REVOKE这些特殊权限总是隐式地属于所有者,是不能直接查询到这些权限信息的,需要在使用数据字典来查看

使用元命令查看t02表的权限列表

test=# \dt+ public.t02 
                       关联列表
 架构模式 | 名称 |  类型  | 拥有者 |    大小    | 描述 
----------+------+--------+--------+------------+------
 public   | t02  | 数据表 | user02 | 8192 bytes | 
(1 行记录)
test=# \dp+ public.t02 
                      存取权限
 架构模式 | 名称 |  类型  | 存取权限 | 列特权 | 策略 
----------+------+--------+----------+--------+------
 public   | t02  | 数据表 |          |        | 
(1 行记录)

用数据字典查看t02表的权限列表

在数据字典内可以看到如DROP、GRANT等这些特殊权限的列表

test=# select * from information_schema.table_privileges where table_catalog='test' and table_schema='public' and table_name='t02'; 
 grantor | grantee | table_catalog | table_schema | table_name | privilege_type | is_grantable | with_hierarchy 
---------+---------+---------------+--------------+------------+----------------+--------------+----------------
 user02  | user02  | test          | public       | t02        | INSERT         | YES          | NO
 user02  | user02  | test          | public       | t02        | SELECT         | YES          | YES
 user02  | user02  | test          | public       | t02        | UPDATE         | YES          | NO
 user02  | user02  | test          | public       | t02        | DELETE         | YES          | NO
 user02  | user02  | test          | public       | t02        | TRUNCATE       | YES          | NO
 user02  | user02  | test          | public       | t02        | REFERENCES     | YES          | NO
 user02  | user02  | test          | public       | t02        | TRIGGER        | YES          | NO
(7 行记录)

最终验证对象拥有着的DROP、GRANT、REVOKE等特殊权限不能被授予或撤销

test=# revoke drop on TABLE t02 from user02;
错误:  未知的权限类型: "drop
test=# REVOKE GRANT ON TABLE t02 FROM user02;
错误:  语法错误 在 "ON" 或附近的
第1行REVOKE GRANT ON TABLE t02 FROM user02;
test=# GRANT drop on table t02 to user02;
错误:  未知的权限类型: "drop"
test=# GRANT revoke on table t02 to user02;
错误:  未知的权限类型: "revoke"

报错提示未知权限的原因是在普通的查询权限中根本是查不到DROP、GRANT等这种特殊权限的,所以才会显示未知权限

所有者或system可以撤销所有者在表中的普通权限

修改t02表的所有者user02用户的权限,只保留对t02表的查询权限

使用user02用户或system用户登录test数据库

1、撤销user02用户在t02表上的所有普通权限

test=# revoke all on TABLE t02 from user02;
REVOKE

2、授予用户user02对t02表的查询权限

test=# grant SELECT on TABLE t02 to user02;
GRANT

3、实验验证user02对t02表的权限

test=# insert INTO public.t02 values (100,'a');
INSERT 0 1

查看t02表的权限信息

test=# \dt+ public.t02 									//查看public.t02的拥有者
                     关联列表
 架构模式 | 名称 |  类型  | 拥有者 | 大小  | 描述 
----------+------+--------+--------+-------+------
 public   | t02  | 数据表 | user02 | 16 kB | 
(1 行记录)
test=# \dp public.t02 								    //查看public.t02下的权限
                          存取权限
 架构模式 | 名称 |  类型  |    存取权限     | 列特权 | 策略 
----------+------+--------+-----------------+--------+------
 public   | t02  | 数据表 | user02=r/user02 |        | 
(1 行记录)

可以看到原本user02是t02的所有者,应该拥有全部的普通权限,但我们依然可以撤销user02的普通权限,并且再加上select的权限给user02

实验3:授权普通用户访问对象

实验准备

1、再schema为public下创建测试表t03,其中t03的字段分别为id和name,类型分别为int和text

test=# create table public.t03 (id int,name text);
CREATE TABLE

2、创建user03用户,密码为kingbase

test=# create user user03 password 'kingbase';
CREATE ROLE

授予用户访问数据库的权限

1、给user03授予可以连接数据库test的权限

test=# grant CONNECT ON DATABASE test TO user03;
GRANT

2、查看test数据库的权限列表

test=# \l test 
                                数据库列表
 名称 | 拥有者 | 字元编码 |  校对规则   |    Ctype    |     存取权限      
------+--------+----------+-------------+-------------+-------------------
 test | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =Tc/system       +
      |        |          |             |             | system=CTc/system+
      |        |          |             |             | user03=c/system
(1 行记录)

image-20241030184803672

授予用户访问模式(schema)的权限

1、授予user03用户可以访问public模式

test=# grant USAGE ON SCHEMA public TO user03;
GRANT

2、查看public模式的权限列表

test=# \dn+ public 
                        架构模式列表
  名称  | 拥有者 |     存取权限     |          描述          
--------+--------+------------------+------------------------
 public | system | system=UC/system+| standard public schema
        |        | =UC/system      +| 
        |        | user03=U/system  | 
(1 行记录)

image-20241030184921532

授予用户访问表的权限

1、授权user03可以查询t03表

test=# grant SELECT ON TABLE public.t03 TO user03;
GRANT

2、查看t03表的权限列表

test=# \dp public.t03
                             存取权限
 架构模式 | 名称 |  类型  |       存取权限        | 列特权 | 策略 
----------+------+--------+-----------------------+--------+------
 public   | t03  | 数据表 | system=arwdDxt/system+|        | 
          |      |        | user03=ar/system      |        | 
(1 行记录)

image-20241030185553852

授予用户先表中插入数据的权限

1、授予user03可以向t03表插入数据

test=# grant INSERT ON TABLE public.t03 TO user03 ;
GRANT

2、查看t03表的权限列表

test=# \dp public.t03
                             存取权限
 架构模式 | 名称 |  类型  |       存取权限        | 列特权 | 策略 
----------+------+--------+-----------------------+--------+------
 public   | t03  | 数据表 | system=arwdDxt/system+|        | 
          |      |        | user03=ar/system      |        | 
(1 行记录)

image-20241030185553852

如图,user03=ar/system表示有system用户授予user03,"a"插入权限。"r"查询权限

验证

1、使用user03用户登录test数据库

test=# \c test user03
您现在已经连接到数据库 "test",用户 "user03".
test=> \conninfo 
以用户 "user03" 的身份,通过套接字"/tmp"在端口"54321"连接到数据库 "test"

2、user03用户能查询t03表

test=> select * from public.t03 ;
 id | name 
----+------
(0 行记录)

3、user03能先t03表中插入数据,插入数据为(1,‘a’)和(2,‘b’)

test=> select * from public.t03 ;
 id | name 
----+------
  1 | a
  2 | b
(2 行记录)

收回public角色的默认权限

查看public角色拥有的默认权限

1、查看public角色再test数据库中的权限

其中"=Tc"表示public角色内的所有用户对test数据库拥有Tc权限

补充说明:T表示TEMPORARY拥有临时创建表权限,c表示CONNECT拥有连接权限

test=> \l test
                                数据库列表
 名称 | 拥有者 | 字元编码 |  校对规则   |    Ctype    |     存取权限      
------+--------+----------+-------------+-------------+-------------------
 test | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =Tc/system       +
      |        |          |             |             | system=CTc/system+
      |        |          |             |             | user03=c/system
(1 行记录)

image-20241030192950827

2、查看public角色在public模式中的权限

注:"=UC"表示public角色内的所有用户对public模式拥有UC权限

"U"表示USAGE能够进入public模式下,"C"表示能在public模式下创建对象

test=> \dn+ public 
                        架构模式列表
  名称  | 拥有者 |     存取权限     |          描述          
--------+--------+------------------+------------------------
 public | system | system=UC/system+| standard public schema
        |        | =UC/system      +| 
        |        | user03=U/system  | 
(1 行记录)

image-20241030193039292

验证public角色拥有的默认权限

注:所有用户默认都属于public,所有用户默认能登录test库,能在public模式下创建对象

1、使用system用户登录test数据库,创建user04用户

您现在已经连接到数据库 "test",用户 "system".
test=# \conninfo 
test=# create user user04 password 'kingbase';
CREATE ROLE

2、使用user04登录test数据库,使用user04在public模式下创建表t04

test=> \conninfo
以用户 "user04" 的身份,通过套接字"/tmp"在端口"54321"连接到数据库 "test"
test=> create table public.t04 (id int,name text);
CREATE TABLE

收回public角色在test数据库的默认权限

1、使用system登录test数据库,回收public角色在test数据库的所有权限

test=# revoke all ON DATABASE test FROM PUBLIC ;
REVOKE

查看test数据库的权限列表,此时应该"UC/system"已经消失

image-20241030193652465

2、验证,此时user04已经无权登录test数据库了

test=# \c test user04
致命错误:  访问数据库"test"的权限不够
描述:  用户没有CONNECT权限.
保留上一次连接

回收public角色在public模式中的默认权限

1、显式的授权user04可登录test数据库,显式的意思就是使用system直接给user04授予权限

test=# grant CONNECT ON DATABASE test TO user04 ;
GRANT

2、收回public角色在public模式中的所有权限

可以看到public模式下"=UC/system"已经消失(被收回)

test=# revoke ALL ON SCHEMA public FROM PUBLIC ;
REVOKE
test=# \dn+ public  
                        架构模式列表
  名称  | 拥有者 |     存取权限     |          描述          
--------+--------+------------------+------------------------
 public | system | system=UC/system+| standard public schema
        |        | user03=U/system  | 
(1 行记录)

image-20241030193951457

3、验证user04用户在模式中创建对象的权限

如果操作没有问题,那么user04是不能在public模式下创建对象(一个表)

test=> create table public.t05 (id int,name text);
错误:  对模式 public 权限不够
第1行create table public.t05 (id int,name text);

总结

我们在学习数据库中的角色/用户的权限的时候,一定要知道数据库的层级关系是怎么样的,从而授予/回收权限

如,test数据库下是public模式,public模式下是t03数据表等等

在授权一个用户/角色可以读取表时,也是按照这样的层级关系来授权;授予用户对test数据库的连接(CONNECT)权限,接着授予用户对public模式的进入(USAGE)权限,最后授予用户对t03数据表有插入和查询权限(INSERT和SELECT);这样一个最基本的用户/角色授权就完成了

当我们不去授权用户/角色对数据库和模式的权限时,而是直接授权对数据表的权限时,其实也是可以正常地查询到数据表的,这就是因为public角色的存在,默认情况下,所有创建的用户都是属于public角色的;而public角色是对数据库有"Tc"权限的,T表示可以创建临时表,c表示允许连接,对所有的模式有UC权限的,U表示进入模式权限,C表示允许在模式下创建对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/920790.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java Database Connectivity (JDBC + Servlet)

Java Database Connectivity (JDBC)是一个Java API,用于与数据库进行连接和操作。通过JDBC,Java程序可以与各种关系型数据库进行通信,执行SQL查询、更新数据等操作。 一、Java连接数据库两种方式 ​​​​​ ​​ 二、Java中…

[Realtek sdk-3.4.14b] RTL8197FH-VG新增jffs2分区操作说明

sdk说明 ** Gateway/AP firmware v3.4.14b – Aug 26, 2019**  Wireless LAN driver changes as:  Refine WiFi Stability and Performance  Add 8812F MU-MIMO  Add 97G/8812F multiple mac-clone  Add 97G 2T3R antenna diversity  Fix 97G/8812F/8814B MP issu…

鸿蒙多线程开发——线程间数据通信对象01

1、线程间通信 线程间通信指的是并发多线程间存在的数据交换行为。由于ArkTS语言兼容TS/JS,其运行时的实现与其它所有的JS引擎一样,都是基于Actor内存隔离的并发模型提供并发能力。 对于不同的数据对象,在ArkTS线程间通信的行为是有差异的&…

基于单片机的多功能跑步机控制系统

本设计基于单片机的一种多功能跑步机控制系统。该系统以STM32单片机为主控制器,由七个电路模块组成,分别是:单片机模块、电机控制模块、心率检测模块、音乐播放模块、液晶显示模块、语音控制模块、电源模块。其中,单片机模块是整个…

测试工程师如何在面试中脱颖而出

目录 1.平时工作中是怎么去测的? 2.B/S架构和C/S架构区别 3.B/S架构的系统从哪些点去测? 4.你为什么能够做测试这一行?(根据个人情况分析理解) 5.你认为测试的目的是什么? 6.软件测试的流程&#xff…

PHM技术:基于支持向量机的智能故障诊断 | 行星齿轮箱智能故障诊断

目录 1.数据获取 2.特征提取与选择 3.健康状态识别 1.数据获取 用的行星齿轮箱数据采集自图1中的多级齿轮传动系统实验台中,在实验过程中,分别模拟了8种行星齿轮箱的健康状态,包括正常、第一级太阳轮点蚀、第一级太阳轮齿根裂纹、第一级…

【划分型 DP-约束划分个数】【hard】【阿里笔试】力扣1278. 分割回文串 III

给你一个由小写字母组成的字符串 s,和一个整数 k。 请你按下面的要求分割字符串: 首先,你可以将 s 中的部分字符修改为其他的小写英文字母。 接着,你需要把 s 分割成 k 个非空且不相交的子串,并且每个子串都是回文串…

国标GB28181视频平台EasyCVR视频融合平台H.265/H.264转码业务流程

在当今数字化、网络化的视频监控领域,大中型项目对于视频监控管理平台的需求日益增长,特别是在跨区域、多设备、高并发的复杂环境中。EasyCVR视频监控汇聚管理平台正是为了满足这些需求而设计的,它不仅提供了全面的管理功能,还支持…

相机触发模式

参考自:相机触发模式_硬触发和软触发的区别-CSDN博客 一、图像采集模式分类 相机的图像采集模式分为内触发模式与外触发模式。其中内触发模式包含连续采集、单帧采集两种形式;外触发模式包含软件外触发、硬件外触发。本文以海康相机的软件平台作介绍&a…

【数据结构】【线性表】【练习】反转链表

申明 该题源自力扣题库19&#xff0c;文章内容&#xff08;代码&#xff0c;图表等&#xff09;均原创&#xff0c;侵删&#xff01; 题目 给你单链表的头指针head以及两个整数left和right&#xff0c;其中left<right&#xff0c;请你反转从位置left到right的链表节点&…

Applied Intelligence投稿

一、关于手稿格式&#xff1a; 1、该期刊是一个二区的&#xff0c;模板使用Springer nature格式&#xff0c; 期刊投稿要求&#xff0c;详细期刊投稿指南&#xff0c;大部分按Soringernature模板即可&#xff0c;图片表格声明参考文献命名要求需注意。 2、参考文献&#xff…

【Google Cloud】Private Service Connect 托管式服务

简介 Private Service Connect 是什么 Private Service Connect 是 Google Cloud&#xff08;原名 GCP&#xff09;Virtual Private Cloud&#xff08;VPC&#xff09;的一项功能。 该功能主要用于以下两个场景&#xff1a; 使用私有 IP 访问 Google Cloud 的 API。将用户自…

JDK、MAVEN与IDEA的安装与配置

1.认识JDK、MAVEN与IDEA JDK 提供了编译和运行Java程序的基本环境。Maven 帮助管理项目的构建和依赖。IDEA 提供了一个强大的开发环境&#xff0c;使得编写、调试和运行Java程序更加高效。 2. 安装与环境配置 2.1 官网地址 选择你需要的版本下载&#xff1a; MAVEN下载传送…

MySQL深入:B+树的演化、索引和索引结构

提示&#xff1a;内容是读《MySQL技术内幕&#xff1a;InnoDB存储引擎》&#xff0c;笔记摘要 文章目录 二叉查找树平衡二叉树(AVL) B树(BTree)B树(BTree)InnoDB B树索引索引结构&#xff08;InnoDB B树&#xff09;B树存放的数据量 二叉查找树 在二叉查找树中&#xff0c;左子…

FairGuard游戏加固实机演示

此前&#xff0c;FairGuard对市面上部分游戏遭遇破解的案例进行了详细分析&#xff0c;破解者会采用静态分析与动态调试相结合的手段&#xff0c;逆向分析出代码逻辑并对其进行篡改&#xff0c;实现作弊功能&#xff0c;甚至是对游戏资源文件进行篡改&#xff0c;从而制售外挂。…

聊一聊Elasticsearch的索引数据搜索过程

与向索引写入数据的时候必须是主分片来承担不同。搜索的时候&#xff0c;主分片和副本分片均可以承担&#xff0c;最终选用主分片还是副本分片是通过轮询的方式来进行选择的。 索引数据的搜索过程&#xff0c;依据有无路由值&#xff0c;分为两种&#xff1a;不带路由值的搜索…

视频修复技术和实时在线处理

什么是视频修复&#xff1f; 视频修复技术的目标是填补视频中的缺失部分&#xff0c;使视频内容连贯合理。这项技术在对象移除、视频修复和视频补全等领域有着广泛的应用。传统方法通常需要处理整个视频&#xff0c;导致处理速度慢&#xff0c;难以满足实时处理的需求。 技术发…

自动化运维-检测Linux服务器CPU、内存、负载、IO读写、机房带宽和服务器类型等信息脚本

前言&#xff1a;以上脚本为今年8月1号发布的&#xff0c;当时是没有任何问题&#xff0c;但现在脚本里网络速度测试py文件获取不了了&#xff0c;测速这块功能目前无法实现&#xff0c;后面我会抽时间来研究&#xff0c;大家如果有建议也可以分享下。 脚本内容&#xff1a; #…

C语言-11-18笔记

1.C语言数据类型 类型存储大小值范围char1 字节-128 到 127 或 0 到 255unsigned char1 字节0 到 255signed char1 字节-128 到 127int2 或 4 字节-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647unsigned int2 或 4 字节0 到 65,535 或 0 到 4,294,967,295short2 字节…

【HashMap篇】HashMap实现原理|put方法|扩容机制|寻址算法|1.7情况下的多线程死循环问题

目录 一、二叉树、红黑树、散列表简单介绍 1.二叉树 &#xff08;1&#xff09;什么是二叉树 &#xff08;2&#xff09;什么是二叉搜索树 2.红黑树 &#xff08;1&#xff09;什么是红黑树 3.散列表 &#xff08;1&#xff09;什么是散列表 &#xff08;2&#xff09;…