我使用证书、带密码的主密钥使用 SQL Server 对称密钥加密技术实现了数据加密。
当我们从 PROD 服务器备份数据库并恢复到不同的服务器时,我们使用 OPEN MASTER KEY DECRYPTION BY PASSWORD = ''... 语句打开主密钥。
主密钥的密码由 SQL 管理员管理。
打开主密钥后,我们可以使用 DecryptByKey 函数解密列数据。但是,一旦我们做了一些分析,我们就想停止解密数据。一段时间后,没有开发人员应该能够解密数据。
如何停止解密数据或关闭主密钥,让开发人员无法看到明文数据?
我不明白为什么 dbo 是 SQL Server 中唯一的授予者?还是我错了?
我的意思如下:无论我当前以哪个用户登录 SQL Server Management Studio,当我转到 Securables 下的数据库属性并授予用户一些权限并保存它并返回到 Securables 时:dbo 是显示为这些权限的授予者,这些权限是我之前授予的,而不是当前登录的用户。
为什么会这样?
在哪种情况下,我可以将 dbo 以外的其他用户视为授权人?
谢谢
在重新启动 SQL Server Management Studio 之前,新创建的表或过程将始终具有红色波浪线下划线。有没有办法在不重新启动 SSMS 的情况下摆脱它?或者它是 SSMS 需要更新的功能?谢谢!
假设我有下表:
Create Table [dbo].[Test_IP]
(
[IP] varchar(40),
[IPType] varchar(6)
)
Run Code Online (Sandbox Code Playgroud)
这个表上有更多的触发器,但它们都是 AFTER 触发器,它是一个大数据库,有很多表、视图和存储过程,并且它被多个进程使用。
我添加了一个日志表和这样的触发器
Create Table [dbo].[Log_Test_IP]
(
[Action] varchar(10),
[IP] varchar(40),
[IPType] varchar(6)
)
GO
Create Trigger MYTR_Log_Test_IP_INS On [dbo].[Test_IP] After insert AS
BEGIN
insert into [dbo].[Log_Test_IP]([Action],[IP],[IPType])
select 'Insert', [IP], [IPType] from inserted
END
GO
Create Trigger MYTR_Log_Test_IP_DEL On [dbo].[Test_IP] After delete AS
BEGIN
insert into [dbo].[Log_Test_IP]([Action],[IP],[IPType])
select 'Delete', [IP], [IPType] from deleted
END
GO
Run Code Online (Sandbox Code Playgroud)
现在我进入了有趣的部分:当我直接插入到Test_IP表中时,我可以看到 Insert 触发器正在工作,但是当它从应用程序或服务(我不知道它是做什么的)定期工作时,我不知道看到日志表中的任何插入记录,我只能看到“删除”记录,即使它在开始时是空的。
我的结论是有一些方法可以绕过触发器,数据库中有很多触发器和存储过程,我不知道去哪里找。
所以,我的问题是如何绕过触发器?
我们正在研究 SSIS Lookup 和 T-SQL Join 之间的性能差异。我们要连接两个表;表位于同一个 SQL 服务器实例中,不同的数据库中。
我怀疑对于小表连接,差异很小或可以忽略不计。在这种情况下,我们的团队更喜欢 T-SQL,它比编写图表更容易编码/脚本。此外,在 DevOps 角度,我们可以在 DB 项目中编译/构建脚本;不幸的是,SSIS 不会正确编译 T-SQL,我可以在 SSIS 执行 SQL 语句中编写“testabcd”,并且该项目仍将构建/编译。
但是,对于需要更长时间处理的大量行,什么更快?具有索引和统计信息的 T-SQL 或全部在内存中进行的 SSIS?
我以不同的观点阅读了这些文章,团队正在努力达成共识。
https://derekdb.wordpress.com/2012/03/13/ssis-lookup-or-t-sql-join/ http://www.sqlservercentral.com/blogs/jamesserra/2011/08/29/when- to-use-t_2D00_sql-or-ssis-for-etl/
让我们假设,T-SQL 引擎和 SSIS 提供相同的硬件:CPU 和内存。鉴于相同的规格,我想从内部算法的角度了解性能速度。
performance sql-server ssis sql-server-2016 performance-tuning
以身份表作为聚簇主键的简单表。我们意外地达到了该列的最大值,因此我要求我们的 DBA 将表重新播种回 0,以便给我们一些时间来检查更新该列。该表也根据时间被清除,所以在我们与任何东西发生碰撞之前,我们有一个很大的 Id 缺口需要用完。由于这是一个高插入表,DBA 提出了页面拆分的可能性,因为我们不再在表的末尾插入。
我的问题是,当标识列的值环绕时,SQL Server 将如何表现?插入间隙会导致性能问题吗?我想考虑创建一个自动循环的序列,而不是将 id 列上升到 bigint。
如何简化下面显示的查询的代码?要求始终与我描述的相同,如下所示:
(select * from questions where points = 3 and type = 1 order by rand() asc limit 6)
union all
(select * from questions where points = 2 and type = 1 order by rand() asc limit 4)
union all
(select * from questions where points = 1 and type = 1 order by rand() asc limit 2)
union all
(select * from questions where points = 3 and type = 0 order by rand() asc limit 10)
union …Run Code Online (Sandbox Code Playgroud) 有没有可能做到这一点?由于内部合规性,需要记录在任何数据库中执行的所有查询和操作。
如果我们需要 MS SQL 2017 标准版或企业版,我需要信息(和/或来源)以确保记录数据库管理员的活动(运行、修改等查询...),而不仅仅是非管理员执行的活动用户。
我正在浏览我们的一个数据库以回答老板的问题,我偷看了一个存储过程。像往常一样,我在 SSMS 中右键单击它,单击 Script stored procedure as... 然后创建,令我惊讶的是,我发现的只是 CREATE PROCEDURE 语句:

为了仔细检查,我让其他人看,他们得到了同样的东西。他们以数据库所有者身份登录,我以系统管理员身份登录。我接下来跑了
select
m.definition
from sys.procedures p
left join sys.sql_modules m on p.object_id=m.object_id
where p.name in ('spPUpdateContactUserLockout', 'spPLINK_SYNC_CONTACT');
Run Code Online (Sandbox Code Playgroud)
我以前没见过这个。曾经。我不认为没有定义主体就可以创建存储过程,并且在此实例上的多个数据库中有几个这样的过程。在这一点上我很担心,但我不确定我是否不必担心,或者我是否应该比现在更担心。
此实例是 SQL Server 2017 Standard x64 RTM-CU11,我使用的是 SSMS 17.9。任何见解表示赞赏!
我想删除我在 SQL Server 2008 的脚本中使用的临时表。如果不编写几行代码,我找不到删除它的方法。我一直无法找到正常工作的代码。有没有什么办法不用编写代码就可以做到这一点?如果没有,我的方法应该是什么?在新脚本中复制我的代码然后创建同名临时表会有帮助吗?
非常感谢任何帮助/建议/建议。
sql-server ×10
performance ×2
audit ×1
encryption ×1
intellisense ×1
logs ×1
mysql ×1
permissions ×1
ssis ×1
ssms ×1
t-sql ×1
trigger ×1
union ×1