我今天正在查看一个旧的存储过程,并注意到它quotename在输入参数上使用。在做了一些挖掘以弄清楚它到底做了什么之后,我发现了这个站点。我现在了解它的作用以及如何使用它,但该站点表示它被用作 SQL 注入攻击的缓解措施。当我过去使用 asp.net 开发直接查询数据库的应用程序时,我会使用 ADO.Net 参数将用户输入作为文字值传入,而从不真正担心在我的存储过程中保护它。
我现在正在编写一个存储过程,该过程将由我不编写的应用程序使用,因此我确实需要尝试在过程级别防止注入攻击,这是quotename最好的方法还是有更新的功能/更好的方法?
让我了解这种思维模式的代码(@parm1是用户输入参数):
'SELECT project [Project], project_desc [Description],
customer [Customer], cpnyid [Company]
FROM PJPROJ (nolock)
where project like ' + quotename(@parm1,'''') + '
Run Code Online (Sandbox Code Playgroud) 假设我有一个简单的查询
SELECT col1, col2, COUNT(col3)
FROM tbl_name
WHERE condition
GROUP BY col1, col2
ORDER BY col1 ;
Run Code Online (Sandbox Code Playgroud)
我的理解是 group by 子句似乎已经具有排序功能。如果 col1 的相邻行碰巧具有相同的值,则 DB 引擎将对 col1 进行排序,然后对 col2 进行排序。至少这是我使用 sql server 的经验。
如果是这样的话,这里的 order by 子句真的没有必要吗?
我想在我拥有的 SQL Server 2017 测试数据库上故意创建坏索引条件,只是为了更好地理解这些维护脚本?SQL Server 索引和统计维护
是否有一种快速/自动的方法来破坏索引完整性或增加索引碎片?您知道我可以查看哪些有用的资源来实现这一目标吗?
我们有下表(在 Android 上的 SQLite 中),其中包含单词及其频率的树结构(嵌套集模型):
lexikon
-------
_id integer PRIMARY KEY
word text
frequency integer
lset integer UNIQUE KEY
rset integer UNIQUE KEY
Run Code Online (Sandbox Code Playgroud)
和查询:
SELECT word
FROM lexikon
WHERE lset BETWEEN @Low AND @High
ORDER BY frequency DESC
LIMIT @N
Run Code Online (Sandbox Code Playgroud)
我认为覆盖索引(lset, frequency, word)会很有用,但我觉得如果范围内的lset值太多,它可能表现不佳(@High, @Low)。
(frequency DESC)有时,当使用该索引的搜索早期产生@N与范围条件匹配的行时,一个简单的索引也可能就足够了。
但似乎性能在很大程度上取决于参数值。
有没有办法让它快速执行,不管范围(@Low, @High)是宽还是窄,也不管高频词是否幸运地在(窄)选择的范围内?
这里的手册非常不清楚,甚至没有提供一些示例 SQL 语句:http : //dev.mysql.com/doc/refman/5.6/en/column-indexes.html
改写问题的另一种方法如下:
我们知道我们可以有一个多列的索引。如果这些列的索引是不同类型的呢?说第一列是spatial,另一列是fulltextsearch,等等。我们可以在mysql中这样做吗?(奖励:如果您碰巧知道,我们可以在 mongodb 中这样做吗)
假设你有一个 myisam 表
它有一个包含点的 LATLONG 列
它有一个 FULLTEXT 列,其中包含“业务”中的单词
您想先按 LATLONG 查询,然后在匹配的 LATLONG 中根据 FULLTEXT 列进行过滤。
我想您将需要多列索引。
但是什么是 SQL 命令?
我们知道,如果可能,mysql 将始终首先使用全文搜索索引。
这个查询:
SELECT BusinessID as ID ,
111151.29341326*SQRT(pow(-6.186751-X(LatLong),2)+pow(106.772835-Y(LatLong),2)*0.98838574205337) AS Distance from tableauxiliary
use index (LatLong_2)
WHERE
MBRContains(
GeomFromText (
'MULTIPOINT(-6.1934985598076 106.76604791159,-6.1800034401924 106.77962208841)'
),
Latlong)=1
AND Prominent >15
AND MATCH FullTextSearch AGAINST ('sea*' IN BOOLEAN MODE)
ORDER BY
Distance
LIMIT
0, 45
Run Code Online (Sandbox Code Playgroud)
需要很长时间,而这个查询:
SELECT BusinessID as ID ,
111151.29341326*SQRT(pow(-6.186751-X(LatLong),2)+pow(106.772835-Y(LatLong),2)*0.98838574205337) AS …Run Code Online (Sandbox Code Playgroud) 我熟悉 SSMS,但我从未使用过 .net、c# 或 Visual Studio(一直在做其他事情:汇编、c、unix、vi、oracle 等)。
我试图找出基本的 2012 SSIS ETL(没有 BI 或数据仓库),但找不到任何可以解释所有这些如何组合在一起的内容:
目录
解决方案
项目
包还有其他的吗?
假设我只想使用 SSIS 构建一个简单的测试,将一个文件导入到一个表中,需要以上哪些,以及我以什么顺序创建它们?
此外,您是否有任何指向基本 SSIS 2012 ETL 概述和/或文章方法的良好链接。
假设我们有一个包含 1200 万个姓名和地址的数据库,需要使用全文进行搜索,但每一行也包含一个整数值,比方说COMPANYID。该表在这 1200 万行中包含大约 250 个不同的 COMPANYID。
在定义全文索引时,是否有可能COMPANY在树中为每个索引提供自己的“分支”?
如何使用 psql 从指定的 Postgres 数据库中获取没有页眉或页脚或其他任何内容的表名?也就是说,如果我有名为“table1”和“table2”的表,那么输出将是:
table1
table2
Run Code Online (Sandbox Code Playgroud)
仅此而已。我一直在尝试各种组合,但看起来它应该比我制作的要容易得多。
在 SQL Server 2008 中配置 TDE 时是否有任何最佳实践?在 SQLMag 上,“透明数据加密常见问题解答”一文说 CPU 的使用率可能增加了 30%?
除了增加服务器马力之外,DBA 在打开 TDE 时通常还会做些什么吗?
我不是要开始 Windows/mac 类型的讨论。
就我个人而言,我不需要任何令人信服的NOLOCK作为反思性练习的好主意。似乎在开发时一切都应该是有目的的而不是反动的 (/amen)
所以......负责程序员坚持NOLOCK是要走的路。推荐所有临时查询和查询生产时。我还没有在每个表上看到没有 nolock 提示的存储过程。
不要成为那种走进来告诉每个人核心信念都是错误的,而没有任何支持的人。
仅查看各种博客文章下的评论会话,发送链接可能还不够。长期持有的信念等......有些人不相信这是一个问题。请参阅:我读过的每篇 nolock 博客文章下的评论部分。
目前,其他一些 DBA 正在与一些神秘的僵局搏斗。如何确定 NOLOCK 是否是来源?
有人建议从跟踪等中查看 XML,但这不会明确说明死锁是导致问题的原因,是吗?我从来没有看到过直接的错误消息。真的吗?
否则这些僵局怎么可能被钉在这个上面?
DDL 语句就像CREATE是一个线索。在我发出警报之前,是否有任何我可以指出的输出或我可以找到的一些数据可以帮助证实我的理论?
或者我是否运行跟踪标志或扩展事件来识别发生死锁时正在运行的内容,然后从 DDL 语句中推断?
看看数据可能被 nolock 提示弄乱的所有不同方式,果断地确定似乎是一个困难的问题。
sql-server ×6
index ×4
mysql ×1
nolock ×1
performance ×1
postgresql ×1
psql ×1
security ×1
sqlite ×1
ssis ×1
t-sql ×1