在SQL Server中,我想限制所有用户(除了少数特定用户)发送带有附件的电子邮件。
例如,有人将数据导入 Excel 文件并使用该sp_send_dbmail
过程通过邮件发送。
我们可以限制此程序的使用吗?
或者还有其他方法可以做到吗?
有一些用户拥有系统管理员权限,我也想限制他们。
如果不可能,至少我想在有人发送带有附件的电子邮件时收到通知。
触发器或程序可能有效,但我无法得到任何结果。
在SQL Server中,我想限制所有用户(除了少数特定用户)发送带有附件的电子邮件。
例如,有人将数据导入 Excel 文件并使用该sp_send_dbmail
过程通过邮件发送。
我们可以限制此程序的使用吗?
或者还有其他方法可以做到吗?
有一些用户拥有系统管理员权限,我也想限制他们。
如果不可能,至少我想在有人发送带有附件的电子邮件时收到通知。
触发器或程序可能有效,但我无法得到任何结果。
在 SQL Server 中,有什么方法可以获取有关何时创建列以及哪些列是新列的信息?另外,我需要查找列中的任何更改,例如哪些列的数据类型发生了更改。我可以获取表的创建和最后修改日期,但对于列,我找不到任何查询来执行此操作。我尝试使用触发器、审计和在论坛中找到的其他查询,但没有得到我想要的结果。如果有人知道解决方案,请帮忙。第三方工具也是可以接受的。提前致谢。这是我的触发代码:
DROP TABLE IF EXISTS ColumnChanges
CREATE TABLE ColumnChanges (
Id INT IDENTITY(1,1) PRIMARY KEY,
DatabaseName NVARCHAR(100),
TableName NVARCHAR(100),
ColumnName NVARCHAR(100),
ActionType NVARCHAR(50),
OldDataType NVARCHAR(50),
NewDataType NVARCHAR(50),
Add_Modify_Date DATETIME
)
CREATE TRIGGER trg_ColumnChange_AfterAlter
ON DATABASE
FOR ALTER_TABLE
AS
BEGIN
DECLARE @EventData XML
SET @EventData = EVENTDATA()
DECLARE @DatabaseName NVARCHAR(100)
DECLARE @TableName NVARCHAR(100)
DECLARE @ActionType NVARCHAR(50)
DECLARE @NewDataType NVARCHAR(100)
DECLARE @Add_Modify_Date DATETIME
SET @DatabaseName = @EventData.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'NVARCHAR(100)')
SET @TableName = @EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(100)')
SET @ActionType = 'ADDED/MODIFIED'
SET @NewDataType = @EventData.value('(/EVENT_INSTANCE/AlterTableActionList/Alter/Columns/Column/DataTypeWithCollation)[1]', 'NVARCHAR(100)')
SET @Add_Modify_Date = GETDATE()
DECLARE @ColumnName NVARCHAR(100)
SELECT @ColumnName = COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName
DECLARE @OldDataType NVARCHAR(100)
SELECT @OldDataType = DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = @ColumnName
INSERT INTO ColumnChanges (DatabaseName, TableName, ColumnName, ActionType,OldDataType,NewDataType, Add_Modify_Date)
VALUES (@DatabaseName, @TableName, @ColumnName, @ActionType, @OldDataType, @NewDataType, @Add_Modify_Date)
END