根据微软“SQL Server 数据库的 ALTER AUTHORIZATION”:
对新主人的要求:
新的所有者委托人必须是以下之一:
- SQL Server 身份验证登录。
- 代表 Windows 用户(不是组)的 Windows 身份验证登录。
- 通过代表 Windows 组的 Windows 身份验证登录进行身份验证的 Windows 用户。
显然一个组不能拥有一个数据库。确实调用
alter authorization on database::MyDatabase to [domainname\SQLServerAdminGroup]
Run Code Online (Sandbox Code Playgroud)
结果在消息中
数据库类型的实体不能由角色、组、approle 或映射到证书或非对称密钥的主体拥有。
例如,让 SQL 管理员的 Windows 安全组的单个成员成为数据库所有者似乎很容易受到该帐户被废弃的影响。在这个问题中,这似乎是所有者员工离开公司时发生的事情。 此答案将数据库所有权作为 NT 主要主体的问题总结如下:
将数据库所有权默认为 NT 主要主体会产生一个包含问题(所有者是由 AD 管理的 NT SID,并且不会随数据库文件一起移动,NT 帐户可能会被指纹等)。
我是 SQL Server 管理的新手,与例如文件的所有权相比,只有主要主体才能成为所有者的限制很突出。根据微软“如何分配和更改所有者”:
默认情况下,新对象的所有者是在附加到创建过程的访问令牌中标识为默认所有者的安全主体。...当用户是管理员组或域管理员组的成员时,会发生唯一的例外。在这两种情况下,用户访问令牌中的所有者字段包含组的 SID,而不是单个用户帐户的 SID。假设管理帐户仅用于管理系统,而不用于任何个人目的。因此,由一个管理员创建的对象可以由同一组中的其他管理员管理。
换句话说,
这给我留下了以下问题:
我有一些体现有向无环图的关系,其中包括类似于以下内容的模式:
我正在寻找一种有效的方法来遍历此图形数据。下面是计算节点 0 的后代的看似简单任务的示例:
DROP TABLE IF EXISTS #edges;
CREATE TABLE #edges(tail int, head int);
INSERT INTO #edges(tail,head) VALUES
(0,1), (5, 6), (10,11), (15,16),
(0,2), (5, 7), (10,12), (15,17),
(1,2), (6, 7), (11,12), (16,17),
(1,3), (7, 8), (11,13), (17,18),
(2,3), (7, 9), (12,13), (17,19),
(2,4), (8, 9), (12,14), (18,19),
(3,4), (8,10), (13,14),
(3,5), (9,10), (13,15),
(4,5), (9,11), (14,15),
(4,6), (14,16);
WITH descendents(node)
AS(
SELECT 0 as node
UNION ALL
SELECT head as node FROM descendents as prior
JOIN #edges …
Run Code Online (Sandbox Code Playgroud) 考虑以下 SQL
DECLARE @JSON VARCHAR(max);
DECLARE @t AS TABLE(
field char(32),
len1 int,
nfield nchar(32),
nlen1 int,
vfield varchar(32),
vlen1 int
);
SET @JSON = '[
{ "Field" : "abcd" }
]'
INSERT INTO @t
SELECT
Field as field,
Len(Field) as len1,
Field as nfield,
Len(Field) as nlen1,
Field as vfield,
Len(Field) as vlen1
FROM OPENJSON (@JSON)
WITH ( Field nchar(32) );
INSERT INTO @t ( field , len1 ,nfield, nlen1 ,vfield, vlen1 )
VALUES ( 'efgh', len('efgh'),'efgh', len('efgh'),'efgh', len('efgh')) …
Run Code Online (Sandbox Code Playgroud)