我是SQL服务器的新手,我有一个问题
我在SQL服务器本地数据库实例上创建了一个数据库,然后将数据库的.mdf文件复制到USB闪存驱动器,我就可以从另一个用户帐户打开数据库了。 所以我想明白为什么会这样?这是否意味着任何人都可以复制我的数据库文件并在自己的服务器上打开它?我怎样才能确保这一点?
由于
答案 0 :(得分:5)
这是否意味着任何人都可以复制我的数据库文件并在自己的服务器上打开它?
是的,只要它是相同版本的SQL Server。这就是为什么保持对运行SQL Server的服务器的控制以及防止未经授权访问文件系统或备份的关键。
所以我想明白为什么会这样?
相同的软件使用相同的格式。就像Excel文档如何保存在一台计算机上并在另一台计算机上打开一样,数据库也是如此。默认情况下,SQL Server以最简单,最直接的方式存储数据,以实现最佳性能。数据文件的安全性通常是次要问题,因为大多数SQL Server实际上都位于锁定的门后,并且操作系统访问仅限于具有域身份验证的计算机管理员。
如果您正在运行SQL Server 2008+ Enterprise,则可以访问Transparent Data Encryption来加密磁盘上的数据文件。 doesn't prevent moving the database如果您具有对原始主机系统的完全访问权限,但它确实意味着有其他步骤,并且通过直接从磁盘读取数据来访问数据将很困难。此外,您还可以encrypt your backups(我相信SQL Server Standard及以上版本支持此功能,我对Express不确定。)
就Express LocalDB而言......您的选择非常有限。您可以使用NTFS级别加密,但这会影响性能,因为数据库引擎不再知道加密正在进行。此外,任何可以访问未加密数据库的人都可以访问要复制的数据库文件,因此您实际上并未受到内部攻击的保护。您也可以使用BitLocker全盘加密,但同样会带来一些I / O成本,并且再次防止内部攻击。
最后,无论您做什么,使用sa
或dbo
级别访问服务器的任何人都可以读取您的数据。您可以选择仅在数据库中存储加密数据,但这几乎消除了使用SQL的任何优势,并且您的应用程序仍然需要存储在某处解密它的方法,这意味着有人可以找到您的解密密钥并从那里。
答案 1 :(得分:3)
如果服务器是真正的生产服务器并且它是正确安全的,那么人们应该能够连接到数据库(使用服务器名称和数据库名称以及某种身份验证),但除此之外,除了管理员之外,没有人可以对服务器进行任何其他类型的访问。
具体来说,除了管理员之外,没有人应该:
它应该如何应对真实的"服务器
SQL Server LocalDB is a local-machine-only version of SQL Server Express用于发展。
所以我猜你正在谈论的机器是一台开发机器。
但如果它是生产服务器或开发机器并不重要 - 以下内容始终适用:
每当有人可以访问实际的物理机器时,他们就可以复制数据库文件。
当有人拥有数据库文件的副本时,无论您设置了什么权限,他们都可以在另一台服务器上恢复并使用管理员帐户打开它。管理员帐户始终可以打开它。
没有办法阻止这种情况,除了确保使用USB闪存驱动器的邪恶人员在远程连接到数据库之外永远不会有任何类型的访问权限。
修改强>
数据加密和特殊密钥怎么样?
我个人之前并不了解它,但在the other answer已经有一些关于它的信息 - 去看看吧。
<强> TL / DR 强>