MySQL SecureString作为连接字符串

本文关键字:连接 字符串 SecureString MySQL | 更新日期: 2023-09-27 18:25:22

我有一个关于SecureString作为MySql连接器的连接字符串的一般问题。如果我理解正确的话,SecureStrings是在程序中存储字符串的"安全"方式。现在我有两个问题:

  1. 我必须在安装时读入密码(TextBoxstring,因此不安全)
  2. 我必须为MySQL连接器建立一个连接字符串,它是string(再次不安全)

示例:

MySqlConnection con = new MySqlConnection();
MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder();
builder.Add("SERVER", "loaclhost");
builder.Add("PORT", "3306");
builder.Add("DATABASE", "test_db");
builder.Add("UID", "root");
builder.Add("PASSWORD", "11235813"); //not the real password ;)
con.ConnectionString = builder.ConnectionString;
con.Open();

这就引出了我的下一个问题:MySQL-Connectorneneneba API是"不安全的",因为所有值都存储为明文string

最后一个问题:使用SecureString有意义吗?

在我看来,在我的程序中,我可以在任何地方使用string。如果涉及到MySQL,所有类型的加密(在我的程序中)都将是无用的。

我的观点对吗?还有其他办法吗?

致以最良好的问候Alex

MySQL SecureString作为连接字符串

还有其他方法可以做到这一点。这取决于你认为谁在连接字符串后进行混合,以及他们将拥有什么类型的访问权限和技能水平。连接字符串就在那里,在某个地方,无论你如何隐藏它。

知道连接字符串可能会被黑客入侵,我总是认为它会被黑客攻击,并在另一端采取预防措施。

我们在DB服务器端做了几件事,以确保即使连接字符串被压缩,数据仍然是安全的。

  • 与连接字符串关联的用户在服务器上几乎没有权限。他们对包含存储过程的SCHEMA的唯一权限是EXECUTE和CONTROL
  • 前端的唯一访问权限是通过存储过程。我们从不允许前端发送SQL字符串
  • 数据保存在一个与执行表不同的模式中,在data模式中,与连接字符串相关联的用户具有零权限,他们不能看、闻或触摸它
  • 存储过程将权限委托给没有足够权限执行proc的登录用户。(执行为"无登录用户")

这就是我们所能做的。我们还没有找到一种方法来防止连接字符串以某种方式暴露在某个地方。

回答亚历克斯在下面提出的问题。(太长,无法发表评论)

注意。以下是针对MS SQL Server的,它可能适用于其他DBMS系统,但我不能保证任何其他系统。

数据库包含架构,架构包含数据库对象,如表、视图、存储过程。schmea允许您隔离数据库对象,例如,如果您有一组任何人都可以看到的表,那么它们可以进入COMMON模式,如果您拥有需要保护的工资信息,则可以将其放入payroll模式。然后,您可以根据SCHEMA中对象的类型在SCHEMA上设置不同的安全措施。从图形上看,它们看起来像硬盘上的文件夹,下面是它们所包含的所有数据库对象。当您启动服务器时,会自动创建几个模式。你最熟悉的是DBO schmea。如果管理员将其设置为默认模式,您可能不会意识到这一点。

我们所做的是将所有数据放入一个data schmea中,这意味着只允许使用表。因此,如果我们有一个工资数据库,那么数据表将进入一个名为dataPayroll的模式。

存储过程是数据库服务器在调用时可以运行的一个或多个SQL代码块。它可以返回数据表或单个值。把它想象成C#中的一个方法。

存储过程具有SQL代码中使用的输入和返回参数。参数化存储过程是抵御SQL注入攻击的强大防御手段。

我们的协议说,存储过程和视图都存储在一个以"prog"开头的模式中。因此,在工资单数据库的情况下,所有不是数据的对象都在progPayroll模式中。

然后,由Connection字符串定义的用户对"prog"架构只有"控制"answers"执行"权限。这允许它们调用存储过程。连接字符串定义的用户被拒绝所有其他权限。该用户在其他地方也被拒绝所有权限。在存储过程中,访问数据的权限被委派给NO LOGIN用户,该用户有权使用EXECUTE AS命令从"数据"架构检索数据。

前端没有sql。所有前端程序员都知道存储过程的名称、参数以及返回类型和值。

这样,即使攻击者设法从你的程序中提取出连接字符串,他们仍有很多工作要做,才能对你的数据库做任何事情,因为他们拥有的用户只能执行存储过程。

如果你不知道这些东西是什么,那么你真的需要找一个DB程序员来为你设置系统。