Persist Security Info Property=true和Persist Security Info Property=false Persist Security Info Property=true表示在连接字符串中包含敏感信息,例如密码。如果设置为false,则连接字符串将不包含敏感信息。这对于安全性很重要,因为它可以防止未经授权的人访问敏感信息。

73

对于这些属性:

Persist Security Info=true

Persist Security Info=false

你能告诉我它们之间有什么区别,如果我不把它放到我的连接中会发生什么吗?

connect.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;
                            Data Source=C:/Users/Nourah/Downloads 
                            /Phase3/Salary.accdb; 
                            Persist Security Info=False;";

1
但是当我在代码上应用时,我并没有仔细理解,结果相同。 - Nourah
不确定在使用ms-access时使用Persist Security Info是否有任何意义。 - Steve
2个回答

85
即使您设置了Persist Security Info=truePersist Security Info=false,在前台不会显示出差异。差异发生在后台。
Persist Security Info=False时,如果连接处于打开状态或曾经处于打开状态,则不会返回安全敏感信息(例如密码)作为连接的一部分。
如果您将Persist Security Info=True设置为true,则Windows将记住连接字符串中指定的密码。
这就是区别所在。 MSDN说明 仅当您在连接字符串中提供用户名和密码时,设置Persist Security Info true或false才会生效。如果您在连接字符串中提供用户名和密码并将Persist Security Info设置为false,则无法提取凭据,但是如果您在连接字符串中设置Persist Security Info为true并给出凭据,则Windows将记住凭据,并且可以通过编程方式提取。

所以,如果我想将其设置为true,我该如何编写连接代码? - Nourah
@Nourah 如果您在连接字符串中提到用户名和密码,那么将其设置为true或false只有在这种情况下才会生效。如果您在连接字符串中提到用户名和密码并将其设置为false,则无法提取凭据。但是,如果您在连接字符串中提供凭据时将其设置为true,则Windows将记住凭据,并且可以在程序中提取它们。请参见编辑后的答案。 - Sachu
10
“then the credentials cannot be extracted..” 的翻译是什么?是通过源代码实现的吗?使用这种设置的优点和缺点以及使用场景是什么?翻译:如果这样设置,凭据将无法被提取。这是通过源代码实现的吗?什么是优缺点和一个需要将其设置为true的简单场景? - eaglei22
6
一个使用 .net 实体框架 DbContext 的用户可能希望提取连接字符串,以便创建额外的连接,用于较低级别的操作,如 SqlBulkCopy。 - Chris
2
@Chris 没错。您想从EF DbContext获取连接字符串,以便用于一些非EF DB操作,例如SqlBulkCopy,或者您想从原始SQL查询中获取数据而不创建POCO来读取它(据我所知,EF Core不允许将原始SQL执行为“object”)。不过,我想知道使用Persist Security Info = True是否会带来安全风险,以及通过选项模式使连接字符串可用是否更安全。我不知道它会如何,但我不是100%确定。 - jspinella
显示剩余2条评论

31

我在这里找到了一个答案,来自 SQL Server MVP Dan Guzman 的这个帖子

我建议您指定 FALSE 或完全省略关键字,因为它是默认值,即使在开发期间也是如此。唯一需要指定 TRUE 的时间是如果应用程序使用 SQL 身份验证并随后从连接对象检索密码,在我的经验中,这很少被做或需要。性能不是问题。


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