【问题标题】:How to check if all my SQL Server stored procedures are encrypted or not in one shot?如何一次性检查我的所有 SQL Server 存储过程是否已加密?
【发布时间】:2021-06-06 13:16:30
【问题描述】:

有什么方法可以一次性检查我所有的存储过程是否都加密了?

我知道要查看过程的定义,我收到一条消息,告诉我它已加密。

EXEC sp_helptext 'StoredProcedureName';

但是我有很多存储过程(1000+),那么有没有更好的方法来检查所有存储过程的 1 个镜头?

【问题讨论】:

标签: sql-server tsql stored-procedures


【解决方案1】:

您需要查看sys.sql_modules system view

SELECT
    p.name,
    IsEncrypted = CAST(CASE WHEN m.definition IS NULL THEN 1 ELSE 0 END AS bit)
FROM sys.procedures p
JOIN sys.sql_modules m ON m.object_id = p.object_id
WHERE m.definition IS NULL

或者,您可以检查对象属性 (kudos to @AaronBertrand)

SELECT
    name,
    IsEncrypted = OBJECTPROPERTY([object_id], 'IsEncrypted')
FROM sys.procedures;

【讨论】:

  • 可能需要区分系统/内置过程和用户​​定义过程。
【解决方案2】:

如果问题确实是 所有 SP 加密,那么以下代码将处理它:

select case when exists
  ( select 42 from sys.procedures where ObjectProperty( object_id, 'IsEncrypted' ) = 0 and [type] = 'P' ) then 'No'
  else 'Yes' end as AllSPsEncrypted;

【讨论】:

    猜你喜欢
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2019-01-16
    相关资源
    最近更新 更多