|
|
1
6
您控制的是类访问代码(L2S)。 我建议在分部类中重写DataContext的SubmitChanges,以便什么都不做(甚至抛出一个错误!)(或实现属于您的DataContext的所有扩展性方法InsertObject、UpdateObject或DeleteObject) |
|
|
2
7
不,没有办法(我知道)。不幸的是,正确的方法是更改当前用户的授权,或者创建一个只有选择权限的新用户。我意识到这不是您要寻找的答案,而是当您试图更改中的内容时,SQL服务器崩溃,这似乎是一个真正值得研究的问题。是因为您正在使用“sa”帐户进行连接吗?如果是这样,您应该创建另一个用户并向新用户授予适当的权限。 |
|
3
4
这实际上取决于您使用的是什么数据库和数据库提供程序。有些允许对连接字符串进行只读访问,有些则不允许。 例如:
当为SQL Server Mobile使用.NET Compact Framework数据提供程序时,SQL Server 2005 CE有可能
SQL Server 2008, doesn't . 您可以查看更多 connectionstrings.com . |
|
|
4
1
在连接字符串级别上,除了更改用户(您已经说过不能这样做),没有什么可以阻止写入操作。 在这种情况下,您只需尽最大努力防止任何写入;即:
然而,仍然没有什么能阻止程序员来,撕开你的连接字符串,并将它插入到他们自己的连接中来执行写操作。 因此,您可以将连接字符串移动到只有内部代码知道如何访问的其他地方(它仍然是文本文件驱动的,不过,不要使用代码常量!)它仍然没有阻止任何人使用它——但它使它变得更加困难。 (补充)我应该解释一下为什么它不能保护它。 撇开连接字符串本身的源很可能是可访问的,即使通过使用加密库等进行保护,除了信任级别之外,没有什么能阻止我对您的代码进行反射并调用它。您可能会选择整个模糊的路线来阻止我解构您的代码;但您的开发部门肯定不需要这种程度的偏执? 不过,归根结底,因为正如你所说,这是“SEP”(别人的问题),你无法控制这个问题——如果有人问你为什么,尽管你尽了最大的努力,但你不能 保证 如果不执行任何写入操作,您可以放心地指责“其他人”。 |