小编Pet*_*ith的帖子

估计与实际行差异(实际远小于估计) - 排序

我正在运行一个查询,该查询正在处理 XML 文档中的一些节点。我估计的子树成本以数百万计,似乎这一切都来自 SQL Server 对我通过 XPath 从 xml 列中提取的某些数据执行的排序操作。Sort 操作的估计行数约为 1900 万,而实际行数约为 800。查询本身运行得相当好(1 - 2 秒),但这种差异让我想知道查询性能以及为什么会这样差别这么大?

performance xml sql-server query-performance

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

如何更改登录名和在存储过程中创建的数据库的数据库所有者?

我有一个签名的存储过程,它创建一个新数据库、一个新登录名并将新用户分配为新数据库的所有者。那么我的存储过程会创建新的登录名和新数据库,但不会将新用户分配为新数据库的所有者。存储过程位于应用程序数据库中,而不是 master。

我得到的错误是:

找不到主体“BlahUser”,因为它不存在或您没有权限。

存储过程在具有有限权限(在存储过程上执行)的不同登录名 (simpleUser) 下执行。

证书用户具有以下权限:

  • 创建任何数据库
  • 更改任何登录

有问题的代码是:

SET @sqlStmt = 'ALTER AUTHORIZATION ON DATABASE::'+@sessionid+'Data TO ['+@orgName+'User]'

SET @metasql = '
USE [master]
EXEC (''' + REPLACE(@sqlStmt, '''', '''''') + ''')
'
EXEC sp_executesql @metasql
Run Code Online (Sandbox Code Playgroud)

我尝试像这样将执行用户(simpleUser)的模拟授予存储过程中的新用户,但它也会导致错误。我不确定创建其他用户的用户是否可以自动模拟他们。

SET @sqlStmt = 'GRANT IMPERSONATE ON LOGIN::'+@orgName+'User TO simpleUser';

SET @metasql = '
USE [master]
EXEC (''' + REPLACE(@sqlStmt, '''', '''''') + ''')
' 
EXEC sp_executesql @metasql
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server stored-procedures

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

来宾帐户和数据库链接在 sql server 上的安全隐患?

我有另一个数据库 Ydb 访问数据库 Kdb 中的数据。他们都有相同的所有者。
为了允许跨数据库链接,我似乎需要在 Kdb 中启用来宾用户。

我是这样做的:

USE [master];
GO
ALTER DATABASE Ydb SET DB_CHAINING ON;
ALTER DATABASE Kdb SET DB_CHAINING ON;
GO
USE [Kdb]
GO
GRANT CONNECT TO guest;
Run Code Online (Sandbox Code Playgroud)

我意识到这意味着由 Ydb 的所有者创建的 Ydb 中的存储过程可以在由同一登录名创建时自由访问 Kdb 中的对象。这会开启什么样的攻击?

sql-server-2008 security

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