首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlalchemy OperationalError:(OperationalError) (1045,“用户访问被拒绝

sqlalchemy OperationalError:(OperationalError) (1045,“用户访问被拒绝
EN

Stack Overflow用户
提问于 2013-05-09 14:40:22
回答 3查看 19.5K关注 0票数 3

我正在尝试使用mysql在运行12.04的Ubuntu机器上创建一个远程数据库。

它有一个启用了远程登录的root用户。我已经启动了服务器。

输出

代码语言:javascript
复制
sudo netstat -tap | grep mysql

显示

代码语言:javascript
复制
tcp        0      0 *:mysql                 *:*                     LISTEN      13135/mysqld 

在同样运行Ubuntu 12.04的客户机上,我使用python脚本通过sqlalchemy连接到远程mysql数据库。

代码语言:javascript
复制
from pox.core import core
import pox.openflow.libopenflow_01 as of
import re
import datetime
import time
from sqlalchemy import create_engine, ForeignKey
from sqlalchemy import Column, Date, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.sql.expression import exists

log = core.getLogger()

engine = create_engine('mysql://root:pass@192.168.129.139/home/karthik.sharma/ms_thesis/nwtopology.db', echo=False)

Base = declarative_base()
Session = sessionmaker(bind=engine)
session = Session()

class SourcetoPort(Base):
    """"""
    __tablename__ = 'source_to_port'
    id = Column(Integer, primary_key=True)
    port_no        = Column(Integer)
    src_address    = Column(String,index=True)

    #-----------------------------------------
    def __init__(self, src_address,port_no):
        """"""
        self.src_address = src_address
        self.port_no     = port_no

create_engine()调用失败,出现以下错误。

代码语言:javascript
复制
  return dialect.connect(*cargs, **cparams)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 280, in connect
    return self.dbapi.connect(*cargs, **cparams)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 187, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
OperationalError: (OperationalError) (1045, "Access denied for user 'root'@'openflow.ems.com' (using password: YES)") None None

我不明白为什么会发生这种情况?有什么可以帮上忙的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-09 23:09:44

首先,mysql不喜欢您的root用户密码。

您的连接URI的根用户密码为pass

代码语言:javascript
复制
engine = create_engine('mysql://root:pass@192.168.129.139/home/karthik.sharma/ms_thesis/nwtopology.db', echo=False)

因此,您需要做的是配置root用户密码,并从运行应用程序的主机授予对数据库服务器和应用程序的访问权限。这是step by step guide for doing this

有一种方法可以作为根用户从命令行访问mysql,方法是在运行mysql服务器的服务器上运行命令mysql -u root -p。默认情况下,mysql配置为允许root用户使用空密码从本地主机登录。

请尝试配置mysql数据库访问,如果有问题,请随时将问题发布到stackoverflow。

同样,mysql URI的look也没有什么不同:

代码语言:javascript
复制
'mysql://root:pass@192.168.129.139/nwtopology'
票数 6
EN

Stack Overflow用户

发布于 2013-05-09 15:45:49

我认为mysql用户'root'@'openflow.ems.com'没有访问权限,因此您可以尝试:

代码语言:javascript
复制
GRANT ALL on *.* to 'root'@'openflow.ems.com';
FLUSH PRIVILEGES;
票数 1
EN

Stack Overflow用户

发布于 2021-09-25 09:19:35

供其他人参考-如果您在正确配置访问权限的情况下仍面临此问题,原因可能是您的密码包含特殊字符。特殊字符必须是URL编码的。

在Python3.x中,这可以使用urllib库来完成:

代码语言:javascript
复制
import urllib
db_password = "!my@pa$sword%"
db_password_quoted = urllib.parse.quote(db_password)
print(db_password_quoted)
>> %21my%40pa%24sword%25

然后将db_password_quoted而不是原始密码传递给连接/引擎。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16455934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档