我有一个Azure SQL数据库。是否有可能找出谁在表上创建了约束?或者至少在添加时?如果是,我该怎么做?有用于此目的的脚本/工具吗?
预先感谢
答案 0 :(得分:0)
Azure SQL具有一个名为AUDITING的功能。如果在服务器和/或数据库上启用了该功能,则可以定义一个存储帐户,以将“服务器审核”和“数据库审核”日志发送到该帐户。在Azure存储中,审核日志被保存为名为sqldbauditlogs的容器中的Blob文件集合。例如,使用Power BI可以查看审核日志数据。
如果未启用此功能,除非使用Azure AD身份访问数据库,否则我想找到您的用户。
请注意,高级威胁检测将在异常访问模式时提醒您。建议使用最低特权的访问方式。
参考: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-auditing
答案 1 :(得分:0)
如果启用Azure SQL Auditing,则可以使用PowerShell尝试以下操作。
Set-AzureRmSqlDatabaseAuditing `
-State Enabled `
-ResourceGroupName "resourcegroupname" `
-ServerName "ssqlinstancename" ` #ssqlinstancename.database.windows.net
-StorageAccountName "strageaccountname" `
-DatabaseName "dbname" `
-AuditActionGroup 'SCHEMA_OBJECT_CHANGE_GROUP' `
-RetentionInDays 8 `
-AuditAction "CREATE ON schema::dbo BY [public]"
答案 2 :(得分:0)
也许您可以使用以下查询从所有SQL执行记录中查找何时创建约束。
SELECT TOP 1000
QS.creation_time,
SUBSTRING(ST.text,(QS.statement_start_offset/2)+1,
((CASE QS.statement_end_offset WHEN -1 THEN DATALENGTH(st.text)
ELSE QS.statement_end_offset END - QS.statement_start_offset)/2) + 1
) AS statement_text,
ST.text,
QS.total_worker_time,
QS.last_worker_time,
QS.max_worker_time,
QS.min_worker_time
FROM
sys.dm_exec_query_stats QS
CROSS APPLY
sys.dm_exec_sql_text(QS.sql_handle) ST
WHERE ST.text LIKE '%constraint_name%'
ORDER BY
QS.creation_time DESC
此查询将花费一些时间。
希望这会有所帮助。