查找谁在Azure SQL数据库中创建了表约束

时间:2019-06-12 10:14:36

标签: azure azure-sql-database

我有一个Azure SQL数据库。是否有可能找出谁在表上创建了约束?或者至少在添加时?如果是,我该怎么做?有用于此目的的脚本/工具吗?

预先感谢

3 个答案:

答案 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

此查询将花费一些时间。

希望这会有所帮助。