31 lines
1.0 KiB
C#
31 lines
1.0 KiB
C#
using Microsoft.SqlServer.TransactSql.ScriptDom;
|
|
using SQLLinter.Common;
|
|
using SQLLinter.Common.Helpers;
|
|
|
|
namespace SQLLinter.Infrastructure.Rules;
|
|
|
|
public class ExecuteAsOwnerRule : BaseRuleVisitor
|
|
{
|
|
public override string Text => "Процедура должна содержать EXECUTE AS OWNER: {0}";
|
|
|
|
public override void Visit(CreateProcedureStatement node) => check(node);
|
|
public override void Visit(CreateOrAlterProcedureStatement node) => check(node);
|
|
public override void Visit(AlterProcedureStatement node) => check(node);
|
|
|
|
private void check(ProcedureStatementBody node)
|
|
{
|
|
foreach (var option in node.Options)
|
|
{
|
|
if (option.OptionKind == ProcedureOptionKind.ExecuteAs
|
|
&& option is ExecuteAsProcedureOption execOpt
|
|
&& execOpt.ExecuteAs.ExecuteAsOption == ExecuteAsOption.Owner)
|
|
{
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
AddViolation(node.ProcedureReference.Name, SQLHelpers.ObjectGetFullName(node.ProcedureReference.Name));
|
|
}
|
|
}
|