Eu gostaria de acessar um banco de dados MySQL de dentro do SQL Server. Eu criei um DSN do sistema e ele testa OK. Eu criei um servidor vinculado no SQL Server:
- Provedor = Provedor Microsoft OLE DB para Drivers ODBC
- Nome do produto = MySQL
- Fonte de dados = (o nome do DSN)
- Segurança = uma entrada para cada um dos meus logins locais, com meu nome de usuário e senha do MySQL
No entanto, se eu tentar testá-lo, recebo esta mensagem de erro:
Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked
server "X".
OLE DB provider "MSDASQL" for linked server "X" returned message "[MySQL][ODBC
5.3(w) Driver]Access denied for user 'me'@'localhost' (using password: NO)".
(Microsoft SQL Server, Error: 7303)
A senha é definitivamente definida e funciona muito bem no MySQL Workbench. É um administrador no MySQL. Ambas as máquinas são locais. Tentei adicionar meus creds como padrão ("para um login que não está na lista, use este contexto de segurança"); nenhuma mudança.
Configurei meu DSN como de 64 bits, correspondendo ao meu sistema operacional, usando o "MySQL ODBC 5.3 Unicode Driver", que eu suponho que foi instalado com o mecanismo MySQL e/ou MySQL Workbench. O aplicativo ODBC de 32 bits oferece os drivers usuais em português (por que português?!) - Access, dBase, Excel, Paradox, etc.
Acabei de me deparar com isso instalando um servidor vinculado ao MySQL com o conector "MySQL 8.0". A mesma mensagem de erro no OP ocorreu ao tentar as versões de 64 bits dos conectores ANSI e Unicode no host do Windows Server 2016 de 64 bits/SQL Server 2019 Standard.
No meu caso, o problema tinha a ver com a string de conexão, especificamente a
PWD=MyPa$$word
parte. Substituí-lo pelo equivalentepassword=MyPa$$word
resolveu o problema.Crédito para este artigo MSSQL Tips , que tem um gráfico dos possíveis parâmetros de string de conexão.
Uma solução possível é a escolha do driver ODBC. 64 bits parece estar OK, mas substituindo o "MySQL ODBC 5.3 Unicode Driver" por "MySQL ODBC 5.3 ANSI Driver", o problema desapareceu.
Os dois drivers são discutidos no Stack Exchange , nos fóruns do MySQL e nos documentos do MySQL , mas eles não deixam claro que um servidor vinculado ao SQL Server requer o driver ANSI. Pelo menos, com minha configuração (praticamente todos os padrões, é uma nova instalação, nada incomum que eu possa pensar), o driver ANSI funcionou e o driver Unicode não.