SQL2005下怎么样批量加密所有的存储过程.一次性加密掉所有的存储过程
解决方案 »
- dri权限是怎么一回事?
- @@@@@@@@简单的SQL语句@@@@@@@@
- update 的时候使用 case when
- 问题一个View的内容更新后, 依赖的View确没有更新
- 远程连接数据库
- 新建一登陆用户后,怎样使得这个用户和sa有相同的权限,就是对所有数据库都可以完全控制
- 如何防止删除表?
- 再次泣拜查询列名解决方法!邹键等各位大侠不惜指赐教!!!!!!
- 我通过odbc连接SQL SERVER数据库时,只有在访问了存放SQL SERVER的机器以后才能连通这是为什么?
- 请 CrazyFor(蚂蚁),大力等高手帮忙!!
- 如何实现查询的时候.不重复某字段呢?
- ASP调用存储过程的参数传递问题!!!!
FOR
WITH P AS(
SELECT
name = QUOTENAME(S.name) + N'.' + QUOTENAME(P.name),
objname = P.name,
M.definition,
ProcHeader = LEFT(M.definition, CHARINDEX('AS', M.definition) + 1)
FROM sys.procedures P, sys.sql_modules M, sys.schemas S
WHERE P.object_id = M.object_id
AND P.schema_id = S.schema_id
AND P.is_ms_shipped = 0
AND M.definition IS NOT NULL
)
SELECT
sql1 = N'DROP PROC ' + name,
sql2 = CASE
WHEN ProcHeader LIKE N'%CREATE%PROC%' + objname + N'%WITH%AS%'
THEN STUFF(definition, PATINDEX(N'%WITH%AS%', ProcHeader) + 4, 0, N' ENCRYPTION, ')
WHEN ProcHeader LIKE N'%CREATE%PROC%' + objname + N'%FOR%REPLICATION %AS%'
THEN STUFF(definition, PATINDEX(N'%FOR%REPLICATION %AS%', ProcHeader), 0, N' WITH ENCRYPTION ')
ELSE STUFF(definition, PATINDEX(N'%AS%', definition), 0, N' WITH ENCRYPTION ')
END,
definition
FROM P
BEGIN TRY
BEGIN TRAN
OPEN tb
DECLARE
@sql1 nvarchar(max),
@sql2 nvarchar(max),
@definition nvarchar(max)
FETCH tb INTO @sql1, @sql2, @definition
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC(@sql1)
EXEC(@sql2)
PRINT(N'')
PRINT(N'----------------------------------------------------')
PRINT(N'-- old define --------------------------------------')
PRINT(N'----------------------------------------------------')
PRINT(@definition)
PRINT('GO')
FETCH tb INTO @sql1, @sql2, @definition
END
CLOSE tb
DEALLOCATE tb
COMMIT TRAN -- 建议先注释掉此句,测试无误后再提交事务
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0
ROLLBACK TRAN SELECT ERROR_NUMBER(), ERROR_MESSAGE()
END CATCH
select object_id from sys.objects where type = 'P'2.用循环或者游标一个个找出存储过程的源码
declare @tmp nvarhcar(max)
select @tmp = defintion from sys.sql_modules where object_id = @id 3.找到 @tmp 中第一次出现 ' AS ' 的位置,注意AS前后有空格4.将 WITH ENCRYPTION 插入到 AS 前的位置,上一步已经找到是第几个字符了5.搜索 @tmp 将第一次出现的 CREATE 改成 ALTER6.执行这个 @tmp 现在没问题了吧,一个个执行循环结束全部都加密了charindex 和 substring 应该都会用吧