什么是 sql server 安全的最佳实践?使用被授予架构对象权限的 AD 组,还是应该将 AD 组添加到被授予架构对象权限的数据库角色?如果后者是最佳实践,那么使用数据库角色的真正好处是什么?
我正在尝试在 Windows 2012 Server 上安装 SQL Server 2012 Express 以进行测试。这台机器是我们公司域的一部分。
在安装过程中,我尝试将域帐户之一用于 SQL Server 数据库引擎服务,但由于以下错误而失败,
“SQL Server 服务帐户登录名或密码无效。请使用 SQL Server 配置管理器更新服务帐户。”
我已经验证了域用户和密码。并且此帐户已启用“作为服务登录”权限。我也已将此用户添加到本地管理员组,但仍然无法进行。
任何建议表示赞赏。
在线 MSDN 文章“同时针对多台服务器执行语句 (SQL Server Management Studio) ”(SQL Server 2012)指出:
"注意
在执行以下过程之前,请创建中央管理服务器和服务器组。有关详细信息,请参阅创建中央管理服务器和服务器组 (SQL Server Management Studio )”
尽管如此,我删除了任何 CMS(中央管理服务器)实例,并且仍然在 2 台不同机器上的多个 SQL Server 上获得相同的结果

似乎我没有在在线 MSDN 中找到 SQL Server 中央管理服务器的意义(或点)的说明。
你能给我一些吗?
这个问题以前有人问过,但我没有看到任何答案(/sf/ask/452816941/)
当用户最初是使用 GUI 中的“SQL User without login”用户类型选项创建时,如何将登录映射到用户?我正在使用 SQL Server 2012
我想在 where 子句中使用一个参数,仅当它的值由强类型数据集提供时,这是我目前正在尝试的,当我提供时我得到正确的结果,parameter3而当我不提供它的值时没有结果。
我想要的是,当我没有为 提供值时parameter3,它不应该在查询中使用它,因为它的值为空,我想查看查询中的所有结果,而不是where Paramerter3 = null:
ALTER procedure [dbo].[GetData]
(
@Parameter1 varchar(256),
@Parameter2 varchar(256),
@Parameter3 int = null
)
AS
SELECT
*
FROM
Table1
WHERE
Table1.URL LIKE '%' + @Parameter1 + '%'
AND Table1.ID = @Parameter2
AND (@Parameter3 IS NULL OR Table1.ID2 = @Parameter3)
ORDER BY
Table1.Title
Run Code Online (Sandbox Code Playgroud)
编辑:我试过托马斯的回答并像这样执行:
EXEC @return_value = [dbo].[GetData]
@Parameter1 = N'asda',
@Parameter2 = N'asda',
@Parameter3 = null
SELECT 'Return Value' = @return_value
GO
Run Code Online (Sandbox Code Playgroud)
正如托马斯所说,我还更新了存储过程。
我们有一个 SQL Server 2012 Enterprise 设置,具有大量 RAM (256 GB),此时数据库相当小(大约 17 GB)。现在,由于各种编码问题,我们遇到了性能问题,希望通过一些代码审查和优化来解决。与此同时,有一种尝试通过为tempDBLUN获得更快的磁盘来提高性能,例如使用 FusionIO PCIe 闪存卡。
我担心的是,鉴于 SQL Server 仍然有足够的 RAM 可以利用,我们不会看到添加更快的磁盘带来任何真正的性能改进。我认为大多数tempDB操作将发生在 RAM 中,或者发生在磁盘上但最终缓存在 RAM 中(在主机、HBA 或 SAN 上)。
有谁知道当 SQL Server 2012tempDB有足够的 RAM 可供使用时,它是否仍会等待磁盘操作上的 IO 阻塞,或者tempDB我们看到的磁盘活动是否只是为了提供持久性或持久性?
我有三个系统:DEV、UAT、PROD,都运行 SQL 2012 Enterprise。我有现有的包可以命中这些系统上的对象。每次我必须进行影响元数据的更改时,仅更新目标系统上的对象,然后更新指向系统的 SSIS 包,然后在系统上重新部署该包是不够的。即使在重新部署之前会更新包以处理新的元数据,我仍然必须进入每个系统并再次更新包,然后才能识别新的元数据。
这种行为对我来说是新的。在 BIDS 2008 中,一个系统上元数据的刷新将持续到它部署到的任何系统。现在,如果我在部署之前更改连接管理器,我必须返回并重新刷新元数据,然后才能发送它。似乎每个连接设置的元数据被保留,并且在更新包时不会更新。
一个例子,我可以清楚地说明这一点:我在所有三个系统上的目标表中添加了一列。我在指向 DEV 时更新包以反映更改,然后进行部署。到现在为止还挺好。然后我更新连接管理器以指向 UAT,并在那里部署更改的包。在这一点上,我希望不需要刷新元数据,因为 UAT 中目标表的模式与 DEV 中的模式相匹配,包在上次刷新时指向该模式。但是,该包就像未更新一样,需要在明确指向该系统的同时刷新其元数据才能工作。
为了解决这个问题,我在连接管理器上添加了一个由 System::MachineName 确定的 ServerName 属性的表达式,认为问题是在我正在开发的机器上更改连接管理器会立即触发检查那里的对象,即使延迟验证打开。没有这样的运气;它仍然显示相同的行为。
我在网上找不到太多关于此的信息,以确定它是 SSDT 2012 的预期行为还是我做错的事情或真正的错误。
任何人都对这个问题有任何见解?
我有一个存储过程,它使用 Id 列表填充临时表 #employee_benefits。该表最终大约有 10,000 行长。下面的查询然后从一个名为 EmployeeBenefitData 的表中进行选择,该表有大约 400 万行。
SELECT ebd.EmployeeBenefitDataId, ebd.EmployeeBenefitId, ebd.[DataDefinitionId]
FROM #employee_benefits eb
INNER JOIN EmployeeBenefitData ebd ON eb.EmployeeBenefitId = ebd.EmployeeBenefitId
Run Code Online (Sandbox Code Playgroud)
瓶颈是 EmployeeBenefitData 表上的索引扫描。它首先进行索引扫描,然后将其加入临时表。临时表充当过滤器,这意味着在连接之前扫描所有数据的效率非常低。我添加了以下代码以将扫描更改为搜索并显着减少所需的读取量。
DECLARE @MinEmpBenId INT, @MaxEmpBenId INT
SELECT @MinEmpBenId = MIN(EmployeeBenefitId), @MaxEmpBenId = MAX(EmployeeBenefitId)
FROM #employee_benefits
SELECT ebd.EmployeeBenefitDataId, ebd.EmployeeBenefitId, ebd.[DataDefinitionId],
dd.TypeId, dd.DataDefinitionId, dd.Name, ebd.[Value], ebd.[Date], ebd.[Text]
FROM #employee_benefits eb
INNER JOIN EmployeeBenefitData ebd ON eb.EmployeeBenefitId = ebd.EmployeeBenefitId
INNER JOIN DataDefinition dd ON ebd.DataDefinitionId = dd.DataDefinitionId
WHERE ebd.EmployeeBenefitId >= @MinEmpBenId AND ebd.EmployeeBenefitId <= @MaxEmpBenId
Run Code Online (Sandbox Code Playgroud)
它对客户端统计数据产生了巨大的影响 …
基于该 msdn 页面: 服务器内存设置,最好保留 SQL-Servers min 和 max memory 的默认值以使其保持动态...
根据我通过教程学到的知识,您应该始终定义一个最大值,关于最小值,我没有听说过太多。我正在使用简单的旧 perfmon 监视我的页面文件,我意识到很少发生磁盘交换,一旦它几乎导致服务器崩溃。
这可能与 SQL Server 中的默认最大内存设置有关吗?数据库大约为 150 GB,内存为 48 GB,该机器上没有其他应用程序在运行。
另外,为什么你应该有一个最小值?我知道太低的值会阻止 SQL-Server 启动,我知道 SQL-Server 将内容保存在内存中,因此不会尝试释放它的缓存。
我正在使用 SQL-Server 2012,在此先感谢您!
我有一个处于FULL恢复模式的主数据库,它是Always On组的一部分。有没有办法在FULL恢复模式下最小化记录插入操作?
我有一个每天执行的进程,并在表中插入几百万条记录。随着操作的继续,事务日志文件的大小急剧增加(从 1 GB 到 40 GB)。
正如我所读到的,我可以使用一些未完INSERT全记录操作的变体,但我担心切换恢复模型的效果?
t-sql sql-server-2012 transaction-log availability-groups bulk-insert
sql-server-2012 ×10
sql-server ×6
performance ×3
security ×2
t-sql ×2
bulk-insert ×1
memory ×1
permissions ×1
ssdt ×1
ssis ×1
tempdb ×1