标签: certificate

证书链由不受信任的机构颁发

前段时间我在 Windows 10 家庭版环境(准确地说是笔记本电脑)上安装了 SQL Server 2016 开发者版,一切都很好。

然后有人——盒子的管理员——决定在没有告诉我的情况下重命名盒子。

之后,当尝试连接到 SQL 服务器时,我们遇到了以下错误消息:

在此处输入图片说明

在此处输入图片说明

这是一个与此非常相似的问题:

从 Azure 网站连接 VM 角色中的 DB 时,“证书链由不受信任的机构颁发”

我也去过这里:

目标主体名称不正确。无法生成 SSPI 上下文。(Microsoft SQL Server,错误:0)

我一直在使用 Kerberos 配置管理器,它给了我不同的错误消息

在此处输入图片说明

我应该说 我能够通过 SQL 服务器身份验证连接到这个 SQL 服务器实例,但我想使用 Windows 身份验证进行连接。

只是要清楚 - 这都是本地机器,不属于任何域。

我不太确定如何从这里开始,我想要的是使用 Windows 身份验证。

与证书相关的错误信息让我想到这里重新颁发证书。我不确定如何完成这项工作,或者这是否是解决这种情况的有效方法。

我今天不会在这台机器附近,但我会尽快赶上。如果时间允许,我会继续我的研究。

authentication sql-server kerberos sql-server-2016 certificate

20
推荐指数
2
解决办法
7万
查看次数

使用跨数据库证书时触发器中的权限

我使用跨数据库证书(如 Erland Sommarskog 所述)来控制对我环境中某个数据库的访问(SQL Server 2008 R2)。

我在数据库 A 中存储了更新数据库 B 中表的存储过程。直到现在,这一直适用于 db A 中的各种存储过程和 db B 中的表。我正在尝试更新 db B 中的表,但该表上有一个触发器。此触发器在 db B 的另一个表中插入其他数据。我收到错误消息:

消息 916,级别 14,状态 1,过程 table_trigger,第 11 行 服务器主体“sql\login”在当前安全上下文下无法访问数据库“B”。

我尝试为与证书绑定的数据库 B 用户授予插入权限以插入其他表,但它没有解决错误。除了更改触发器以使其使用之外,我还有其他选择WITH EXECUTE AS OWNER吗?

这是复制问题的 DDL:

CREATE LOGIN [GuggTest] WITH PASSWORD=N'abcd', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

CREATE DATABASE A;
CREATE DATABASE B;

USE A;

CREATE TABLE dbo.SPtoUpdate
    (
      ID INT
    , ILoveFishing VARCHAR(255)
    );
INSERT INTO dbo.SPtoUpdate
        ( ID , ILoveFishing )
VALUES  ( …
Run Code Online (Sandbox Code Playgroud)

trigger sql-server permissions signature certificate

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

错误:“无法删除证书,因为一个或多个实体使用它进行签名或加密。”

我有一个要从数据库中删除的证书。

如果我发出命令

DROP CERTIFICATE <FooCert>
Run Code Online (Sandbox Code Playgroud)

我收到错误

The certificate cannot be dropped because one or more entities are either signed or encrypted using it
Run Code Online (Sandbox Code Playgroud)

根据 Jason Strate 的说法,我应该能够找出证书签名的内容。

以下查询返回 0 行:

SELECT OBJECT_SCHEMA_NAME(co.major_id) + '.' + OBJECT_NAME(co.major_id)
FROM sys.certificates c 
INNER JOIN sys.crypt_properties co ON c.thumbprint = co.thumbprint
WHERE co.crypt_type_desc = 'SIGNATURE BY CERTIFICATE' 
AND c.name = 'FooCert'
Run Code Online (Sandbox Code Playgroud)

我还尝试根据这个 SO 问题将实体解耦。 /sf/ask/3672231/

如何删除对这个证书的依赖,以便我可以删除它?

sql-server encryption sql-server-2012 signature certificate

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

在数据库和实例之间共享密码加密的证书

题:

我正在尝试创建一个(自签名)证书并跨多个数据库和实例进行部署。

我创建和备份证书:

USE MASTER
CREATE CERTIFICATE DavesCert ENCRYPTION BY PASSWORD ='S3creT!' WITH SUBJECT = 'The master cert'

BACKUP CERTIFICATE DavesCert TO FILE = 'd:\DavesCert.cer' 
WITH PRIVATE KEY ( DECRYPTION BY PASSWORD = 'S3creT!' ,
FILE = 'd:\DavesCert.pvk' , 
ENCRYPTION BY PASSWORD = 'S3creT!' );
Run Code Online (Sandbox Code Playgroud)

我用

USE FOO
GO

CREATE CERTIFICATE ERecruitStatsGatheringCert       
FROM FILE = 'd:\DavesCert.cer'      
WITH PRIVATE KEY (FILE = 'd:\DavesCert.pvk', 
DECRYPTION BY PASSWORD = 'S3creT!')
Run Code Online (Sandbox Code Playgroud)

并收到以下错误:“请在数据库中创建主密钥或在执行此操作之前在会话中打开主密钥。”

我不想创建数据库主密钥。我很高兴根据需要通过密码解密证书。

背景: SaaS 应用程序。数据库和实例之间的多对多关系。

我需要每个数据库都能够通过执行一个存储过程来查询它自己的统计信息,该存储过程包含对 DMV 的一些调用以返回统计信息。

应用程序在低权限帐户下运行。DMV 需要 VIEW SERVER STATE …

sql-server-2005 security sql-server signature certificate

7
推荐指数
2
解决办法
8222
查看次数

是否可以将证书添加到数据库角色?

我有一个证书,用于对 SQL Server 中的存储过程进行 DB 间访问,并且能够通过使用以下方法在数据库中创建新用户来提供对存储过程的访问:

CREATE CERTIFICATE testCertificate
FROM FILE = 'test_certificate6.cer';

CREATE USER testCertificateUser 
FROM CERTIFICATE testCertificate;

GRANT AUTHENTICATE TO testCertificateUser;
GRANT EXECUTE ON storedProc1 TO testCertificateUser;
Run Code Online (Sandbox Code Playgroud)

但需要能够将跨数据库访问添加到现有数据库角色(为了与现有系统兼容)。我该怎么做呢?

sql-server t-sql signature certificate

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

是否有任何理由备份这些系统创建的证书?

我了解备份密钥和用户定义的证书的必要性,但是我们是否有任何理由应该备份这些系统创建的证书?

MS_AgentSigningCertificate

MS_PolicySigningCertificate

MS_SchemaSigningCertificate34284BF7CE6208DC9D835E9F45ADD94F0757439E

MS_SmoExtendedSigningCertificate

MS_SQLAuthenticatorCertificate

MS_SQLReplicationSigningCertificate

MS_SQLResourceSigningCertificate

sql-server backup encryption certificate

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

具有执行方式、跨数据库查询和模块签名的存储过程安全性

我有一种情况,虽然我能够解决它(如重现所示),但我不明白。以下是重点

  • 两个数据库,ChainingSource 和 ChainDestination,两者都将跨数据库链接设置为 true
  • ChainingSource 中的存储过程通过EXEC(@sql)访问 ChainingDestination 中的表
  • 存储过程是用execute as子句定义的
  • 如果我尝试按原样执行该过程,它会说执行上下文的服务器主体无法访问 ChainingDestination
  • 所以我添加了一个证书和代码签名。也就是说,我将证书映射登录添加到服务器,将用户映射到每个数据库,并相应地向证书映射用户授予权限
  • 如果我保留该execute as条款,我会得到同样的错误。
  • 如果我删除该execute as条款,一切都很好。

这是我感到困惑的倒数第二点。或者,具体地,为什么一个不工作,最后一个


/******************************

            Setup

******************************/
USE [master];
go
IF EXISTS (SELECT 1 FROM [sys].[databases] WHERE [name] = 'ChainingSource')
BEGIN
    ALTER DATABASE [ChainingSource] SET OFFLINE WITH ROLLBACK IMMEDIATE;
    ALTER DATABASE [ChainingSource] SET ONLINE;
    DROP DATABASE [ChainingSource];
END
IF EXISTS (SELECT 1 FROM [sys].[databases] WHERE [name] = 'ChainingDestination')
BEGIN
    ALTER DATABASE [ChainingDestination] SET OFFLINE WITH …
Run Code Online (Sandbox Code Playgroud)

security sql-server signature certificate impersonation

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

交换 TDE Cert 缓慢,有什么办法可以提高性能?

公平警告,我对使用 DB 进行加密非常陌生。现在,在服务器之间备份/恢复数据库的过程中,我们使用以下语句来交换证书:

ALTER DATABASE ENCRYPTION KEY REGENERATE 
    WITH ALGORITHM = AES_256 
    ENCRYPTION BY SERVER CERTIFICATE....
Run Code Online (Sandbox Code Playgroud)

这工作得很好,但问题是通过此语句更改证书所需的时间。我注意到更改大于 100GB 的 DB 的证书可能需要一个多小时。

有没有更快的方法来更改任何人都知道的 TDE 证书?

sql-server transparent-data-encryption certificate

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

SQL Server SSL 加密 - 自签名证书有效 - 为什么?

我意识到这是一种奇怪的行为,我想知道在使用 SQL Server 生成的自签名证书时它是否应该以这种方式工作。

  1. 设置“加密连接”选项的客户端(Management Studio),客户端将在 SQL Server 端验证自签名证书并失败,因为自签名证书不受信任

  2. 客户端 (Management Studio)没有设置“加密连接”选项,但使用 SQL Server 配置管理器在 SQL Server 端打开了“强制加密”。客户端不会验证自签名证书,并将成功连接加密连接。

问题

  1. 在服务器端强制执行加密时,为什么客户端不尝试验证 SQL Server 自签名证书?为什么客户端只在客户端强制加密时验证自签名证书?

  2. 如果服务器端加密没有在客户端进行证书身份验证,那么使用 CA 签名证书有什么意义?

更准确地说:当仅打开服务器端加密时,为什么客户端(Mgmt Studio)不尝试验证/验证证书(无论是自签名/CA 签名)?当客户端加密(“加密连接”)打开时,为什么客户端只对服务器提供的证书进行身份验证/验证?

我添加了一个签名证书(由内部 CA 签名)用于服务器端加密。这需要在客户端计算机上安装内部 CA 证书(到受信任的根 CA),但我没有这样做。但是,当服务器端加密打开时,客户端(mgmt studio)仍然连接成功。

authentication sql-server encryption connections certificate

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

证书、非对称密钥或私钥文件无效或不存在

我正在尝试将数据库从不同的服务器还原到我的本地主机服务器上。那个数据库是加密的(bak 文件),所以我必须解密它,这很好,我有所有的证书文件和密码,但是出于某种原因,我仍然收到以下错误:

The certificate, asymmetric key, or private key file is not valid or does not exist; or you do not have permissions for it.

这是我正在执行的代码:

      CREATE CERTIFICATE [Certificate1] 
FROM FILE = 'C:\Location of the certs'
WITH PRIVATE KEY ( 
    FILE = 'C:\Location of the certs' ,   
    DECRYPTION BY PASSWORD = 'password'
);
Run Code Online (Sandbox Code Playgroud)

附注。我不是备份和恢复方面的专家。

sql-server t-sql restore certificate

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