无法将字节数据存储到 sqlserver

Unable to store bytes data to sqlserver

我计划在 SQL 服务器数据库中存储密码的散列值,当用户注册和同一用户登录时,会将用户输入的密码与存储的散列值进行比较。

我正在使用以下代码生成密码的散列值,并想在数据库中插入相同的值,列数据类型为 varbinary(1000)

我使用了以下代码片段来插入数据库,但两个选项都失败了。

insert into users.dbo.allusers values (123456789, 
b'\xc8\xc2\x06\x9f\x8e\x96\xad\xb3\x14r\x97Rm"\'\xfdbt\x03\xc81F\xc59\xd03\xcfXs\x88\xff\x95bg\x7f\xd1\xf6\xfc\x98\xe5x~c\x9eb\x91\x89\x80{\x14i0\x99f&\xa5\e?\xf2\xbd\x06\xf7\xd0', 
'a@a.com',
'a', 
'b'
)
insert into users.dbo.allusers values (123456789, 
convert(varbinary(1000), b'\xc8\xc2\x06\x9f\x8e\x96\xad\xb3\x14r\x97Rm"\'\xfdbt\x03\xc81F\xc59\xd03\xcfXs\x88\xff\x95bg\x7f\xd1\xf6\xfc\x98\xe5x~c\x9eb\x91\x89\x80{\x14i0\x99f&\xa5\e?\xf2\xbd\x06\xf7\xd0', 1), 
'a@a.com',
'a', 
'b'
)

我得到的错误是

SQL Error [102] [S0001]: Incorrect syntax near '\xc8\xc2\x06\x9f\x8e\x96\xad\xb3\x14r\x97Rm"'.

我正在使用带有 SQL Server 2017 标准和 dbeaver 客户端的 cloudsql(gcp 产品)来插入数据。非常感谢任何帮助。

根据评论,我正在编辑我的问题。还使用 python 使用以下 flask 代码

将数据插入 SQL 服务器

def generate_password(password_value):
    salt = os.urandom(32)
    key = hashlib.pbkdf2_hmac('sha256', password_value.encode('utf-8'), salt, 100000)

    # Store them as:
    storage = salt + key 
    return storage

@app.route('/add_new_user', methods = ['POST'])
def add_new_user():
    data = request.get_json(silent=True, force=True)
    cpf = data.get('cpf')
    password = data.get('password')
    email = data.get('email')
    fname = data.get('fname')
    lname = data.get('lname')
    password = generate_password(password)


    mssqlhost = '127.0.0.1'
    mssqluser = 'sqlserver'
    mssqlpass = 'sqlserver'
    mssqldb = 'users'

    try:
        # - [x] Establish Connection to db
        mssqlconn = pymssql.connect(
            mssqlhost, mssqluser, mssqlpass, mssqldb)
        print("Connection Established to MS SQL server.")
        cursor = mssqlconn.cursor()
        stmt  = "insert into users.dbo.allusers (cpf, password, email, fname, lname) values (%s,%s,%s,%s,%s)"
        data = f'({cpf}, {password}, {email}, {fname}, {lname})'
        print(data)
        cursor.execute(stmt)
        mssqlconn.commit()
        mssqlconn.close()
        return {"success":"true"}
    except Exception as e:
        print(e)
        return {"success":"false"}

我在命令提示符中收到不同的错误

more placeholders in sql than params available

因为数据已经有引号因为哈希值(打印数据)

(123456789, b'6\x17DnOP\xbb\xd0\xdbL\xb6"}\xda6M\x1dX\t\xdd\x12\xec\x059\xbb\xe1/\x1c|\xea\x038\xfd\r\xd1\xcbt\xd6Pe\xcd<W\n\x9f\x89\xd7J\xc1\xbb\xe1\xd0\xd2n\xa7j}\xf7\xf5:\xba0\xab\xbe', a@a.com, a, b)

TSQL 中的二进制文字看起来像 0x0A23...

insert into dbo.allusers(cpf, password, email, fname, lname) 
values 
(
  123456789, 
  0xC8C2069F8E96. . .,
  'a@a.com',
  'a', 
  'b'
)