标签: sql-server

在 SQL Server 中打开主密钥后如何停止解密数据?

我使用证书、带密码的主密钥使用 SQL Server 对称密钥加密技术实现了数据加密。

当我们从 PROD 服务器备份数据库并恢复到不同的服务器时,我们使用 OPEN MASTER KEY DECRYPTION BY PASSWORD = ''... 语句打开主密钥。

主密钥的密码由 SQL 管理员管理。

打开主密钥后,我们可以使用 DecryptByKey 函数解密列数据。但是,一旦我们做了一些分析,我们就想停止解密数据。一段时间后,没有开发人员应该能够解密数据。

如何停止解密数据或关闭主密钥,让开发人员无法看到明文数据?

sql-server encryption symmetric-key

1
推荐指数
1
解决办法
327
查看次数

为什么 dbo 是 Microsoft SQL Server 中唯一的授予者?

我不明白为什么 dbo 是 SQL Server 中唯一的授予者?还是我错了?

我的意思如下:无论我当前以哪个用户登录 SQL Server Management Studio,当我转到 Securables 下的数据库属性并授予用户一些权限并保存它并返回到 Securables 时:dbo 是显示为这些权限的授予者,这些权限是我之前授予的,而不是当前登录的用户。

为什么会这样?

在哪种情况下,我可以将 dbo 以外的其他用户视为授权人?

谢谢

sql-server permissions t-sql

1
推荐指数
1
解决办法
2502
查看次数

如何在不重新启动 SSMS 的情况下为新创建的表或过程从 IntelliSense 中删除红色波浪线

在重新启动 SQL Server Management Studio 之前,新创建的表或过程将始终具有红色波浪线下划线。有没有办法在不重新启动 SSMS 的情况下摆脱它?或者它是 SSMS 需要更新的功能?谢谢!

sql-server ssms intellisense

1
推荐指数
1
解决办法
7534
查看次数

如何绕过触发器?

假设我有下表:

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 触发器正在工作,但是当它从应用程序或服务(我不知道它是做什么的)定期工作时,我不知道看到日志表中的任何插入记录,我只能看到“删除”记录,即使它在开始时是空的。

我的结论是有一些方法可以绕过触发器,数据库中有很多触发器和存储过程,我不知道去哪里找。

所以,我的问题是如何绕过触发器?

trigger sql-server

1
推荐指数
1
解决办法
881
查看次数

SSIS 与 T-SQL 连接性能,同一服务器上的差异数据库

我们正在研究 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

1
推荐指数
1
解决办法
3445
查看次数

将身份列重新播种回 0 会导致页面拆分吗?

以身份表作为聚簇主键的简单表。我们意外地达到了该列的最大值,因此我要求我们的 DBA 将表重新播种回 0,以便给我们一些时间来检查更新该列。该表也根据时间被清除,所以在我们与任何东西发生碰撞之前,我们有一个很大的 Id 缺口需要用完。由于这是一个高插入表,DBA 提出了页面拆分的可能性,因为我们不再在表的末尾插入。

我的问题是,当标识列的值环绕时,SQL Server 将如何表现?插入间隙会导致性能问题吗?我想考虑创建一个自动循环的序列,而不是将 id 列上升到 bigint。

performance sql-server clustered-index sql-server-2014

1
推荐指数
1
解决办法
218
查看次数

简化涉及 UNION ALL、WHERE 和 LIMIT 的查询的“重复”代码

如何简化下面显示的查询的代码?要求始终与我描述的相同,如下所示:

(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)

mysql sql-server union

1
推荐指数
1
解决办法
408
查看次数

如何记录用户在 SQL Server 2017 Standard 中所做的所有查询?

有没有可能做到这一点?由于内部合规性,需要记录在任何数据库中执行的所有查询和操作。

如果我们需要 MS SQL 2017 标准版或企业版,我需要信息(和/或来源)以确保记录数据库管理员的活动(运行、修改等查询...),而不仅仅是非管理员执行的活动用户。

sql-server audit logs sql-server-2017

1
推荐指数
1
解决办法
7115
查看次数

缺少存储过程体

我正在浏览我们的一个数据库以回答老板的问题,我偷看了一个存储过程。像往常一样,我在 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 stored-procedures sql-server-2017

1
推荐指数
1
解决办法
72
查看次数

如何从 SQL Server 中删除临时表?

我想删除我在 SQL Server 2008 的脚本中使用的临时表。如果不编写几行代码,我找不到删除它的方法。我一直无法找到正常工作的代码。有没有什么办法不用编写代码就可以做到这一点?如果没有,我的方法应该是什么?在新脚本中复制我的代码然后创建同名临时表会有帮助吗?

非常感谢任何帮助/建议/建议。

sql-server-2008 sql-server

1
推荐指数
1
解决办法
1156
查看次数