今天要转一个sql的程序,是别人写的,我是复制过来学习的,主要目的是想研究怎么对表进行权限控制。其次,发现一些程序在使用数据库的时候好像不是通过登录用户进行查询的,而是通过类似dbo或者networkservice之类的内置账号进行查询,然后返回给程序,显示出来。研究的对象是sepm和wsus,这两个目前还在研究中,估计这周算是耗这里了。

在练习之余把sccm给弄好了,怎么说呢,db坏了,没有备份,结果可想而知。

USE[master]
GO
--宣告一個存放資料表清單的table變數
DECLARE
@tables
Table
(
TABLE_QUALIFIERsysname,
TABLE_OWNERsysname,
TABLE_NAMEsysname,
TABLE_TYPE
varchar
(32),
REMARKS
varchar
(254)
)
--宣告一個存放資料表權限清單的table變數
DECLARE
@privilege_tables
Table
(
TABLE_QUALIFIERsysname,
TABLE_OWNERsysname,
TABLE_NAMEsysname,
GRANTORsysname,
GRANTEEsysname,
PRIVILEGEsysname,
IS_GRANTABLEsysname
)
--將sp_tables的結果匯入至@tables變數
INSERT
INTO
@tables
EXEC
sp_tables
DECLARE
@TabletNamesysname
--查出TABLE_TYPE為'TABLE'的資料列
DECLARE
temp_cursor
CURSOR
FOR
SELECT
TABLE_NAME
FROM
@tablest
WHERE
TABLE_TYPE=
'TABLE'
OPEN
temp_cursor
FETCH
NEXT
FROM
temp_cursor
INTO
@TabletName
WHILE@@FETCH_STATUS=0
BEGIN
--將資料表名稱代入sp_table_privileges,並將結果匯入至@privilege_tables變數
INSERT
INTO
@privilege_tables
EXEC
sp_table_privileges@TabletName
FETCH
NEXT
FROM
temp_cursor
INTO
@TabletName
END
CLOSE
temp_cursor
DEALLOCATE
temp_cursor
--查詢dbo以外的權限
SELECT
*
FROM
@privilege_tablespt
WHERE
GRANTEE<>
'dbo'
2.
Select
SysObjects.NameasTableName,
SysColumns.NameasColumnsName,
SysTypes.NameasDateType,
SysColumns.LengthasDateLength,
SysProperties.ValueasRemark--列描述
FROMSysObjects,SysTypes,SysColumns
LEFTJOINSysPropertiesON(Syscolumns.Id=Sysproperties.IdANDSyscolumns.Colid=Sysproperties.Smallid)
Where(Sysobjects.Xtype='u'orSysobjects.Xtype='v')
ANDSysobjects.Id=Syscolumns.Id
ANDSysTypes.XType=Syscolumns.XType

查看所有表名:

selectnamefromsysobjectswheretype='U'

查询表的所有字段名:

SelectnamefromsyscolumnsWhereID=OBJECT_ID('表名')

select*frominformation_schema.tables

select*frominformation_schema.views
select*frominformation_schema.columns

2.ACCESS

查看所有表名:

selectnamefromMSysObjectswheretype=1andflags=0
MSysObjects是系统对象,默认情况是隐藏的。通过工具、选项、视图、显示、系统对象可以使之显示出来。

ANDSysTypes.Name<>'sysname'
原始链接: