创建基于证书的登录的目的是什么?

15

SQL Server提供了通过证书创建登录的选项。例如:

USE MASTER;
CREATE CERTIFICATE <certificateName>
    WITH SUBJECT = '<loginName> certificate in master database',
    EXPIRY_DATE = '12/05/2025';
GO
CREATE LOGIN <loginName> FROM CERTIFICATE <certificateName>;
GO
然而,文档声称(重点是我的):
引用:

从证书或非对称密钥创建的登录仅用于代码签名。它们不能用于连接到 SQL Server。只有当证书或非对称密钥已经存在于 master 中时,才能从证书或非对称密钥创建登录。

那么创建一个不能用于连接到服务器的登录有什么意义呢?


背景

我们需要对中间层应用程序进行一些安全更改,特别是它连接到数据库的方式。权力的人已经下达了命令:“我们不能使用Windows身份验证”。
我知道这通常是首选方法,但任何访问中间层服务器的人都将与应用程序具有相同的访问权限。

如果我们使用SQL身份验证,我们需要:

  • 加密密码。
  • 将其存储在配置文件/注册表中。
  • 然后在应用程序需要连接到数据库时解密密码。

虽然上述方法是可行的,但我希望能够:

  • 使用基于证书的登录。
  • 在构建过程中将证书与应用程序关联。
  • 并使用它来连接到 SQL Server。

上述文档提取似乎与此相矛盾。


你的断言“任何有权访问中间层服务器的人都可以像应用程序一样访问数据库”是有缺陷的。 - podiluska
3
@podiluska 您的评论有很大潜力成为非常有用和信息丰富的...除了您没有解释为什么您相信自己的论点。 - Disillusioned
出于同样的原因,不是每个可以访问我的电脑的人都拥有与我的账户相同的权限和权利。 - podiluska
2个回答

5

6
可以在链接的附加说明中添加一些简要概述,以避免短小的妖精所带来的影响。 - MrBoJangles
2
我理解所有的内容。我不明白的是如何使用证书登录来签署模块。正如你所指出的,页面明确说明可以这样做,但示例代码并没有演示它。请注意,在示例代码中,login_SysProcCert 实际上没有被用于任何东西,只是作为安全边界存在,如果您删除与其相关的每一行,一切都能正常工作。 - quest4truth
1
@quest4truth,我发现评论比答案更有教育意义和信息量。我不确定TrevorBrooks是否在讽刺(关于让微软知道)。我现在很困惑,所以您确定证书用户不能用于模块签名吗?那么它们用于什么?您说它是一个“安全工具”,用来做什么? - LearnByReading
5
我确定。证书用于模块签名,而安全主体如用户和登录用于访问。没有证书,你无法签署任何东西,而证书也不能像安全主体那样发挥作用。你需要创建一个证书用户。然后,证书用户被授权访问由证书签署的对象。虽然他本身无法执行操作,但他可以作为所有权链的一部分,如果你向另一个人授予了该链的末端权限,他就能访问其中的全部内容。这只是一个安全工具。 - quest4truth
1
@quest4truth,我不是夸张,我花了12个小时在这上面,而你简单的评论就把它解释清楚了。我欠你一个人情!谢谢。如果你能推荐一些学习材料给我,我会更感激。我已经花了12个小时通过在线书籍/教程,但它们都是无用的,因为它们只给你提供例子和案例,而我甚至不理解概念。我发现在线资源充满了例子,缺乏原则/概念。再次感谢。 - LearnByReading
显示剩余9条评论

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接