邪恶八进制信息安全团队技术讨论组's Archiver

冰血封情 2005-2-1 23:36

[转载]获得数据库对象的方法探讨

文章作者:Fang

SQL SERVER
取得数据库名的方法
系统存储过程sp_helpdb
或者
USE master
SELECT sysdb.name AS dbname, xlogin.name AS owner FROM sysdatabases AS sysdb LEFT JOIN sysxlogins AS xlogin ON sysdb.sid = xlogin.sid


sp_helpdb获得的内容更准确:第二种方式无法获取Windows NT登陆用户。

取得表的方法
系统存储过程

USE xxx

EXEC sp_help

或者

获取指定数据库的用户表:

USE DBAudit
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U'

获取指定数据库的系统表:

USE DBAudit
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'S'

或者统一使用:

USE DBAudit

SELECT sysobjects.name AS name, sysusers.name AS owner, type, sysobjects.id AS id FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U' OR type = 'S'

注:

sysobjects中type字段类型解释:

C = CHECK 约束

D = 默认值或 DEFAULT 约束

F = FOREIGN KEY 约束

L = 日志

FN = 标量函数

IF = 内嵌表函数

P = 存储过程

PK = PRIMARY KEY 约束(类型是 K)

RF = 复制筛选存储过程

S = 系统表

TF = 表函数

TR = 触发器

U = 用户表

UQ = UNIQUE 约束(类型是 K)

V = 视图

X = 扩展存储过程

取得列的方法
系统存储过程

USE xxxDatabase

EXEC sp_help xxxTable

或者

USE xxxDatabase

SELECT syscolumns.name AS name, systypes.name AS type FROM syscolumns LEFT JOIN systypes ON syscolumns.xtype = systypes.xtype WHERE syscolumns.id = xxxTableId

这两种方法都可以取得包括视图的列。

取得视图的方法
系统存储过程

USE xxx

EXEC sp_help

或者

获取指定数据库的视图:

USE DBAudit

SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'V'

获取指定数据库的视图的内容:

EXEC sp_helptext xxxObject

取得存储过程的方法
系统存储过程

USE xxx

EXEC sp_help

或者

获取指定数据库的存储过程或者扩展存储过程:

USE DBAudit

SELECT sysobjects.name AS name, sysusers.name AS owner, type FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'P' OR type = 'X'

获取指定数据库的存储过程或者扩展存储过程的内容:

EXEC sp_helptext xxxObject

无法获取加密的存储过程。扩展存储过程只能得到dll程序名。

取得函数的方法
系统存储过程

USE xxx

EXEC sp_help

或者

获取指定数据库的各种函数(内嵌函数等):

USE DBAudit

SELECT sysobjects.name AS name, sysusers.name AS owner, type FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'FN' OR type = 'IF' OR type = ‘TF'

获取指定数据库的函数的内容:

EXEC sp_helptext xxxObject

只能获取用户定义的函数内容。

取得触发器的方法
系统存储过程

USE xxx

EXEC sp_helptrigger xxxTable

或者

获取指定数据库的表的触发器:

SELECT sysobj1.name AS name, sysusers.name AS owner FROM sysobjects AS sysobj1 LEFT JOIN sysobjects AS sysobj2 ON sysobj1.parent_obj = sysobj2.id LEFT JOIN sysusers ON sysobj1.uid = sysusers.uid WHERE sysobj1.type = 'TR'AND sysobj2.name = 'xxxTable'

取得索引的方法
系统存储过程

USE xxx

EXEC sp_helpindex xxxTable

用户
系统存储过程

USE xxx

EXEC sp_helpuser

角色
系统存储过程

USE xxx
EXEC sp_helprole



ORACLE
特殊


页: [1]
© 1999-2008 EvilOctal Security Team