相关疑难解决方法(0)

跨数据库链接与可信选项

最近,我们有一个存储过程请求,需要跨多个数据库进行访问。当然,这种情况并不少见,但在我们的案例中,之前我们使用了服务帐户,并且该服务帐户具有对所有数据库的读/写权限。

但是现在我们将所有权限更改为windows登录AD组,AD组中的用户没有对所有数据库的所有权限。

例子:

  • AD 组 UG1 有 10 个用户,它们是数据库 A 上的用户。
  • 存储过程 PROCA 驻留在数据库 A 中,但对属于数据库 B 和数据库 C 的表进行了选择。
  • 执行权限已授予存储过程 PROCA 和 AD 组 UG1,因为已在数据库 B 和数据库 C 上创建用户(没有其他权限)。
  • DatabaseA、DatabaseB 和DatabaseC 的数据库所有者在登录XXX 下。

众所周知,这种跨数据库的权限可以通过

  • 选项 1:在所有数据库上打开数据库跨链,或
  • 选项 2:为 AD 组 UG1 提供所需的数据库(B 和 C)的单个对象权限或
  • 选项 3:在 DatabaseA 上使用 Trustworthy db 选项并更改存储过程 PROCA 以包括作为“dbo”用户执行,以便权限可以模拟。
  • 选项 4:使用证书

我的问题是,关于安全性和保持简单和安全的最佳解决方案是什么?

请注意,没有任何开发人员是任何数据库的数据库所有者,并且提升的权限仅分配给 DBA,因此有人进行黑客攻击或 SQL 注入或冒充系统管理员的可能性是“无”的。

但同样,我想知道在这种情况下你会怎么做?我更喜欢选项3。

sql-server-2008 security sql-server

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

如何识别导致事务日志增长的事务?

我有一个 20 GB 的数据库,它的事务日志坚持超过 7 GB。

当我使用此脚本找出该数据库中最大对象的大小时,我发现它们相对较小。

在此输入图像描述

我一直在使用默认跟踪来查看此事务日志何时自动增长,但我没有发现。

DECLARE @path NVARCHAR(260);

SELECT 
   @path = REVERSE(SUBSTRING(REVERSE([path]), 
   CHARINDEX(CHAR(92), REVERSE([path])), 260)) + N'log.trc'
FROM    sys.traces
WHERE   is_default = 1;

SELECT 
   DatabaseName,
   [FileName],
   SPID,
   Duration,
   StartTime,
   EndTime
FROM sys.fn_trace_gettable(@path, DEFAULT)
WHERE EventClass = 93 -- log autogrow event
ORDER BY StartTime DESC;
Run Code Online (Sandbox Code Playgroud)

我还尝试了这里的一些脚本,以检查哪些事务正在填充日志,但找不到任何事务。

我相信一定有一些非常长的事务同时进行,或者至少有一个较长的事务正在执行。

我怎样才能检查这些(long transactions in the database)?

在 LIVE 中,这是一个完整恢复模式数据库,是alwayson 的一部分。在 TEST 中,这是一个简单的恢复模式数据库,但由于所有作业都在那里,日志仍然增长到 7GB。

sql-server optimization transaction transaction-log sql-server-2016

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

在虚拟机上应用 sql server 累积更新或服务包时 - 停止 VMWaretools 的安全方法是什么?

在对 sql server 2016 SP1 应用累积更新时,需要停止大量服务和应用程序才能继续进行更新。

其中包括虚拟机的核心,即 VMware Tools 核心服务。

停止此应用程序的所有实例以继续更新是否安全?

什么是安全的方法?

在此处输入图片说明

在此处输入图片说明

sql-server virtualisation windows-server sql-server-2016 patching

4
推荐指数
2
解决办法
3577
查看次数