打乱 SQL Server 中的列?
我们有一个网络应用程序,想向潜在客户演示,但我们最好的方法是使用现有数据,以获得完整的体验。当然,我们不想使用应用程序中可见的实际客户名称或地址等来执行此操作。 SQL Server 中有没有一种简单的方法来随机化或打乱 varchar 或文本字段?
无论如何,这些列都不是键,无论是主键还是外键。
We have a web app we'd like to demo to prospects, but our best way of doing so is with existing data, for a full experience. Certainly, we don't want to do this with actual customer names or addresses, etc visible in the app. Is there an easy way in SQL Server to randomize or scramble a varchar or text field?
None of these columns are keys in anyway, either primary or foreign.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
这是一个迟到的答案,但我对有关此事的任何互联网搜索都不满意。下面是一个示例,它将打乱客户表中的名字和姓氏以创建新名称:
This is a late answer but I was not satisfied with any internet search on this matter. Here's an example that will shuffle the firstname and lastname in a customers table to create new names:
Redgate 有相应的工具: http://www.red-gate.com/ products/SQL_Data_Generator/index.htm
没用过,但是redgate工具非常好。
编辑
它生成数据,而不是打乱,但仍然有用。
Redgate has tool for it: http://www.red-gate.com/products/SQL_Data_Generator/index.htm
Didn't use it, but redgate tools are very good.
EDIT
It generates data, not scrambles, but still can be useful.
我通过更改字段内的字母来扰乱数据一次。所以,如果你有一个名字“Mike Smith”,并且你把所有的 i 改为 o,m 改为 l,e 改为 a,s 改为 t,t 改为 rr,你最终得到的结果
足以使名称不可读,而且您也无法返回并确定它是什么(我更改了一些已经更改为字母的字母。)但是,它仍然是可读的。
I scrambled data once by changing letters within the field. So, if you have a name "Mike Smith" and you change all the i's to o's, the m's to l's, the e's to a's, the s's to t's, the t's to rr's, you end up with
which was enough to make the name unreadable, and also you can't go back and determine what it was (I changed some letters which had already had letters changed to them.) But, it's still kind of readable.
不可能将数据保留在表中并以某种方式仅以混乱的形式显示。
您的选择是通过以某种方式打乱数据来替换数据、生成具有相同通用形式的新数据、编写一个函数(CLR 或 T-SQL)将其打乱作为您使用的查询的一部分,或者加密数据,在这种情况下,只有当用户也有适当的解密密钥时才能显示。
如果您决定替换数据,除了前面提到的 Red Gate 工具之外,您还可以考虑使用 Visual Studio Team Database 附带的数据生成器,或者可能是 Integration Services。如果您想从更复杂的转换中受益,后者可能特别有用。
It's not possible to just leave your data in the tables and somehow only display it in a scrambled form.
Your options are to either replace the data by scrambling it in some way, generate new data that's in the same general form, write a function (CLR or T-SQL) that scrambles it as part of the queries you use, or encrypt the data, in which case it can only be displayed if the user also has the appropriate decryption key.
If you decide to replace the data, in addition to the Red Gate tool previously mentioned, you might also consider using the data generator that comes with Visual Studio Team Database, or perhaps Integration Services. The latter can be particularly useful if you would benefit from a more complex transformation.
dbForge 有一个免费的数据生成工具:http://www.devart.com/dbforge /sql/数据生成器/
dbForge has a free tool for data generation: http://www.devart.com/dbforge/sql/data-generator/
这里有几个简单的方法,它们具有相当好的性能并且可以应用于表:
Here are couple simple methods that have quite nice performance and can be applied to a table:
您可以创建需要更新的列的列表,然后简单地迭代该列表并执行一些动态 sql,以某种方式更新该行。我做了一个相当基本的打乱函数,它只会对数据进行 sha1(使用随机盐),以便它对于大多数用途来说应该足够安全。
You can create a list of the columns that need updating and then simply iterate over said list and execute some dynamic sql that will update the row in some fashion. I made a fairly basic scramble function that will just sha1 the data (with a random salt) so that it should be secure enough for most purposes.