标签: sql-parametrized-query

有没有安全的方法来参数化MySQL查询中的数据库名称?

我正在写一个小的python脚本来帮助我自动创建我的个人项目的mysql数据库和相关帐户.此脚本的一部分是将数据库名称作为字符串,然后创建数据库的函数.

def createDB(dbConn, dbName):
    import MySQLdb
    c = dbConn.cursor()
    query = """CREATE DATABASE %s;""";
    c.execute(query, (dbName,))
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为MySQL的CREATE DATABASE请求数据库的不带引号的名称,如

  CREATE DATAbASE test_db
Run Code Online (Sandbox Code Playgroud)

但我的代码尝试安全地将用户提供的数据库名称插入查询中,创建:

  CREATE DATABASE 'test_db'
Run Code Online (Sandbox Code Playgroud)

并且你得到"你的MySQL语法接近测试时遇到问题".

即使这是供个人使用,我真的不想直接将用户提供的字符串插入任何类型的查询中.它反对我的宗教.有没有一种安全的方法可以将用户提供的数据库名称插入到python(或任何语言)的mySQL查询中,以确保用户输入test_db; DROP some_other_db;会被拒绝或正确转义?

python mysql mysql-python sql-parametrized-query

2
推荐指数
1
解决办法
849
查看次数

Rails 3 connection.execute IN 语句参数数组语法

我有一个关于 Rails 3 ActiveRecord::Base.connection.execute 方法和参数的语法问题,我想与它一起使用。我已经为此奋斗了几个小时,但似乎没有在互联网上找到这个特定问题的任何答案。

数据库是 MySQL。

我需要通过带有 IN 条件语句的 SELECT 创建一个临时表,其中 IN 应该检查的值列表是一个参数 - rails Array。代码如下所示:

arr = [1,2,3]
ActiveRecord::Base.connection.execute("CREATE TEMPORARY TABLE things SELECT * FROM objects WHERE objects.id IN #{arr}") 
Run Code Online (Sandbox Code Playgroud)

我收到一个 MySQL 语法错误!

ActiveRecord::Base.connection.execute("CREATE TEMPORARY TABLE things SELECT * FROM objects WHERE objects.id IN #{(arr)}") 
Run Code Online (Sandbox Code Playgroud)

再次MySQL语法错误!

ActiveRecord::Base.connection.execute("CREATE TEMPORARY TABLE things SELECT * FROM objects WHERE objects.id IN (#{arr})") 
Run Code Online (Sandbox Code Playgroud)

MySQL 语法错误

以上尝试对应这个问答: How to execute任意参数化的SQL in rails

我什至尝试以类似于 find_by_sql 的方式使用,但仍然出现错误:

ActiveRecord::Base.connection.execute(["CREATE TEMPORARY TABLE things SELECT * FROM objects WHERE …
Run Code Online (Sandbox Code Playgroud)

mysql ruby-on-rails sql-parametrized-query ruby-on-rails-3

2
推荐指数
1
解决办法
2809
查看次数

SqlCommand.Parameters.AddWithValue注入安全吗?

SqlCommand.Parameters.AddWithValue方法注射安全吗?

它接受Object有效载荷,所以它如何防止注入?

.net parameters sql-injection sqlcommand sql-parametrized-query

2
推荐指数
1
解决办法
2325
查看次数

为什么在参数化查询中更改参数名会导致抛出SqlException?

我的原始查询使用@WF_ID作为参数名称,并且可以毫无问题地执行.我很懒,WF_要输入很多,所以我将参数重命名为@ID,但现在执行时抛出了SQLException.确切的消息是"无效的列名'_Page'"

以下是查询的两个版本和相应的代码.正如您所看到的,唯一改变的是参数名称.

SQL_Connection.Open();
SQL_Command.Connection = SQL_Connection;
SqlParameter param = new SqlParameter("@WF_ID", SqlDbType.Int);
param.Value = WF_ID;
SQL_Command.Parameters.Add(param);
SQL_Command.CommandText = "SELECT COUNT(*) AS MyCount from members WHERE ID = @WF_ID";
int numRows = Convert.ToInt32(SQL_Command.ExecuteScalar().ToString());
SQL_Command.Parameters.Clear();
Run Code Online (Sandbox Code Playgroud)

版本2.0破碎版

 SQL_Connection.Open();
 SQL_Command.Connection = SQL_Connection;
 SqlParameter param = new SqlParameter("@ID", SqlDbType.Int);
 param.Value = WF_ID;
 SQL_Command.Parameters.Add(param);
 SQL_Command.CommandText = "SELECT COUNT(*) AS MyCount from members WHERE ID = @ID";
 int numRows = Convert.ToInt32(SQL_Command.ExecuteScalar().ToString());
 SQL_Command.Parameters.Clear();
Run Code Online (Sandbox Code Playgroud)

我的初步想法是参数名称不能与其中一个列名相同...但我找不到任何明确说明的内容.

看看这个StackOverflow主题,你似乎无法通过参数传递列名.我可以在SQL存储过程中将列名作为输入参数传递

c# sql sql-server-2008 sql-parametrized-query

2
推荐指数
1
解决办法
108
查看次数

实体框架SQL查询不使用SQL参数

我有一个原始SQL查询,我试图与SqlParameters一起使用.当我不安全地创建查询(使用字符串连接)时,它工作正常...我得到了结果.在这种情况下,我得到10.

当我尝试使用SQL参数时,我得到零记录.我尝试使用和不使用@创建参数,我已经尝试在调用中单独添加它们Query,并且我尝试了对象参数而不是Sql参数.我甚至尝试过只使用一个....而且无论我做什么,我似乎无法使用SQL参数获得结果,只有字符串连接.

实体框架SQL查询如何与SQL参数一起使用,为什么我使用的查询不起作用?

示例代码:

string query = "WITH OrderedItems AS " +
               "(" +
               "SELECT *, " +
               "ROW_NUMBER() OVER (ORDER BY @p0) AS 'RowNumber' " +
               "FROM ITEMS" +
               " WHERE item_name LIKE '%@p1%'" +
               ")" +
               "SELECT * FROM OrderedItems" +
               " WHERE RowNumber BETWEEN " + (skip + 1) + " AND " + (skip + take);

// I have tried using @p0 and @p1 as the parameter names here
var parameters = new object[] …
Run Code Online (Sandbox Code Playgroud)

c# sql entity-framework sql-parametrized-query

1
推荐指数
1
解决办法
5379
查看次数