DM其他常用命令:
创建模式(创建schema)
CREATE SCHEMA MYSCHEMA AUTHORIZATION SYSDBA;
/
注意: 如果是SQL命令行终端执行创建schema语句,无法结束,需要第二行再输入”/“才能结束。
JDBC连接时如果要指定其他模式(默认使用用户名相同的模式名、无需指定模式名):
默认无需指定模式名进行JDBC连接达梦:
jdbc:dm://192.168.1.232:5236
通过 DBA_OBJECTS、ALL_OBJECTS、SYSOBJECTS 视图查看对象:
select * from DBA_OBJECTS where OWNER=‘SYSDBA’; – OWNER指定模式名
select * from DBA_OBJECTS where OWNER=‘TESTUSER01’; – OWNER指定模式名
select * from ALL_OBJECTS where OWNER=‘TESTUSER01’; – OWNER指定模式名
select * from SYSOBJECTS where OWNER=‘TESTUSER01’; – OWNER指定模式名
一般普通用户只需要要授予 RESOURCE 和 PUBLIC 两个角色即可:
GRANT PUBLIC to DAMENG02;
GRANT RESOURCE to DAMENG02;
取消授权(回收权限),需要SYSDBA给其他用户授权/回收权限:
REVOKE PUBLIC FROM DAMENG02;
REVOKE RESOURCE FROM DAMENG02;
注意:如果在授予对象权限时指定 with grant option,则回收时需要增加 cascade 关键字级联回收权限。
GRANT 权限转授选项:
with admin option : user01 被系统管理员授予某些权限,用户 user01 又授予给用户 user02 的某些权限。当系统管理员回收用户 user01 的权限时,用户 user02 的权限将不会受到影响。
with grant option : user01 被系统管理员授予某些权限,用户 user01 又授予给用户 user02 的某些权限。当系统管理员回收用户 user01 的权限时,用户 user02 的权限也会被同步回收。
其他个性化授权:
GRANT CREATE TABLE,SELECT TABLE,UPDATE TABLE,INSERT TABLE to DAMENG02;
GRANT SELECT TABLE to DAMENG02; — 只授予查询权限
REVOKE CREATE TABLE,SELECT TABLE,UPDATE TABLE,INSERT TABLE FROM DAMENG02;
给角色授权,赋予角色权限(可以是角色权限、可以是系统权限、也可以是对象权限):
GRANT role01 TO role02;
GRANT create table TO role02;
GRANT select on xxx.xxx TO role02;
权限包含系统权限和对象权限。基于某个数据库对象的查询、操作等为对象权限。相关数据字典:
select * from DBA_SYS_PRIVS t where T.GRANTEE = ‘DAMENG02’; – 授予的系统权限
select * from DBA_TAB_PRIVS t where T.GRANTEE = ‘DAMENG02’; – 授予的对象权限
select * from DBA_ROLE_PRIVS t where T.GRANTEE = ‘DAMENG02’; – 授予的角色
select * from DBA_COL_PRIVS t where T.GRANTEE = ‘DAMENG02’; – 授予的列权限

达梦数据库内置用户如下:
SYSSSO:系统安全员
SYSDBA:系统管理员
SYS:内置用户,不能直接登录
SYSAUDITOR:系统审计员,用于审计相关功能。
统计信息 & 查询表的数据量(条数)
dbms_stats.GATHER_TABLE_STATS (‘DAMENG02’,‘TEST01’);
SELECT TABLE_NAME, NUM_ROWS FROM USER_TABLES WHERE TABLE_NAME=‘TEST01’;
注意:
1)统计信息收集过程中将对数据库性能造成一定影响,避免业务繁忙时使用;
2)达梦数据库数据表变化以后,需要手动执行 dbms_stats.GATHER_TABLE_STATS 后再查询 USER_TABLES 视图,数据量(NUM_ROWS)才会刷新。这和其他的数据库有区别,其他数据库(Oracle、PostgreSQL、GaussDB等)都会自动刷新;
3)统计信息的查询,不同数据库会有差异:
MySQL:
SELECT TABLE_NAME, TABLE_ROWS FROM information_schema.tables WHERE TABLE_NAME = ‘xxx’;
DM:
dbms_stats.GATHER_TABLE_STATS (‘DAMENG02’,‘xxx’); – 搜集统计信息,只针对 schema=DAMENG 下的指定的表xxx。如果 dbms_stats.GATHER_TABLE_STATS (‘DAMENG02’); 则搜集统计信息,针对 schema=DAMENG 下的所有的表
SELECT TABLE_NAME, NUM_ROWS FROM USER_TABLES WHERE TABLE_NAME=‘xxx’; – 查询数据量
dbms_stats.GATHER_TABLE_STATS 所需权限:
a)需要 DBMS_STATS 对象权限,授权语句如下: GRANT EXECUTE ON sys.dbms_stats TO DAMENG02;
b)需要的对应权限:SYS用户和DBA可以收集、删除所有对象的统计信息,普通用户只能收集、删除自己的表。具备ANALYZE ANY权限可操作除SYS外所有用户的统计信息。
网上有说是只需要授予下面即可:
grant select any table to DAMENG02; – 授予查询任何表
grant select any dictionary to DAMENG02; – 授予查询任何字典
但我在DM上尝试不行,还是提示无查询USER_TABLES权限,授予PUBLIC角色才能查询,需要的是详细对应的哪写权限?还没有确认清楚
==> 最终确认,达梦需要授权 SYS.USER_TABLES 查询权限:
GRANT SELECT on SYS.USER_TABLES to DAMENG02;
另外,如果是Oracle数据库,测试只需要 grant connect, select table to user; 即可,不需要单独授予 SYS.USER_TABLES 查询权限(也不需要授予角色关联该权限)。
相关视图:
DBA_TABLES : 显示的是数据库中所有表(所有表DBA都可以操作)
ALL_TABLES : 显示与当前用户可访问的表 (只要对某个表有任何权限,即可在此视图中看到表的相关信息)
USER_TABLES: 显示当前用户拥有的表
用户锁定和解锁:
alter user DAMENG02 account lock;
alter user DAMENG02 account unlock;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/166910.html