码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Is BCP able to connect db with semicolon(or special charactors) in the password


    最近遇到SQL Server的密码包含特殊字符,导致连接串连接失败。最初遇到的是包含了一个分号“;”, 通过微软官方文档得到了以下解决方法:

    • Why happen the issue
      Because now we're using ";" to split the SQL connection string when parsing string. So if password include a semicolon ";", it will as the split character.
    • Resolve way
      • I find there is a class "SqlConnectionStringBuilder" in the library "System.Data.SqlClient". It can auto deal with special character for password.
      • I already tested it can work.

    刚以为很开心这么快解决了问题,原来新的挑战已经默默的打开。BCP导出数据库数据失败,这个问题一直研究了好久,花费时间搜了不少资料,特此记录一下。

    1. 首先考虑是分号“;”

         找到一篇有用的文章:Is BCP able to connect db with semicolon in the password - Microsoft Q&A

    需要用一对花括号{}把密码括起来,比如:

    bcp tempdb.sys.objects out slask.bcp -n -U hulda -P "{semi;colon}"

    测试可以工作。

    2. 其次考虑是花括号{},因为毕竟处理分号时需要加入花括号,那要是密码里面也有花括号,肯定得额外处理了。

       测试密码:Sz ~`!@#$%^&*()-_+=|/\:'?,{}[]<>.;

        这个密码耗费我不少时间,搜了无数资料,总是测试失败,后来找到一篇有用的文章,算是解决了.

      Leading curly brace (%7B) character in password of a connection string leads to login failure · Issue #8062 · sqlalchemy/sqlalchemy · GitHub

     文中有位牛人提到:

    gordthompson commented on May 28, 2022

    Additional: If the first character is { and the password also contains } then the } characters need to be doubled-up.

    Login name: larry
    Password: {M}0e

    requires

    UID=larry;PWD={{M}}0e};

    gordthompson commented on May 28, 2022

    So that would be

    def odbc_escape(thing):
        return (
            "{" + thing.replace("}", "}}") + "}"
            if thing.startswith("{")
            else thing
        )
    
    
    print(odbc_escape("{M0e"))  # {{M0e}
    print(odbc_escape("M0e{"))  # M0e{
    print(odbc_escape("{M}0e"))  # {{M}}0e}
    

     看完这段说明,终于绕出了这个坑,之前都是把 { 和 } 都double处理了,结果一直失败,现在知道了,只需要将后花括号}额外处理即可。

    所以我上面的密码用BCP运行如下命令即可成功:

    bcp.exe "DECLARE @colnames VARCHAR(max); SELECT @colnames = COALESCE(@colnames + ',', '') + COLUMN_NAME FROM [ScreenbeamCmsReceiverLog].INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'DEV_ReceiverLog' ORDER BY ORDINAL_POSITION; SELECT @colnames;" queryout "E:\test.csv" -c -t -S 192.168.7.209 -U sa -P "{Sz ~`!@#$%^&*()-_+=|/\:'?,{}}[]<>.;}"

    总结:

    a. SQL Server数据库密码有特殊字符时,请用一对花括号{}把密码包起来

    b. 如果密码中包含后花括号}需要,需要用多加一个后花括号来转义,即:}}

    c. 因为密码需要用双引号"包起来,所以如果密码中有双引号的话,也需要多加一个双引号来转义,即""

  • 相关阅读:
    CFD瞬态计算的一些注意事项
    2022宁夏杯C新冠疫情对宁夏旅游业的影响分析及对策研究
    IGH码云克隆包
    基于springboot的医院挂号管理系统
    [RK3568 Android11]Framework层获取和处理按键事件流程总结
    算法2:链表的逆转
    【前端实例代码】如何使用 HTML 和 CSS 快速创建一个响应式导航栏
    线性同余方程(扩展欧几里得acwing878)
    集合框架的认识(三)
    00-linux pwn环境搭建
  • 原文地址:https://blog.csdn.net/wm111/article/details/134007050
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号