解决方案: sqlserver 2008登陆时, 出现服务器主体 "xxxcom" 无法在当前安全上下文下访问数据库 "db_xxx_com"。

本文介绍了解决使用SQL Server Management Studio Express登录SQL Server 2008时出现的数据库访问错误的方法。通过调整对象资源管理器详细信息中的排序规则设置,可以成功列出并访问数据库。

今天有个客户出用SQL Server Management Studio Express来登陆sqlserver 2008出现错误

 

服务器主体 "xxxcom" 无法在当前安全上下文下访问数据库 "db_xxx_com"

 

我记得以前已经遇到过这种问题, 但忘记了那次是如何解决的了, 只能再上网搜索一下, 搞了半天终于想起来是如何解决的了.

 

在登陆成功后, 点击"数据库", 就出现了上面的那句错, 而且列不出数据库, 这时, 点击菜单上的"视图", 打开"对象资源管理器详细信息", 在中间的大框的横条上, 右键, 出现很多选项, 其中把"排序规则"的勾去掉

 

再刷新"数据库"就正常了.

 

微软写的:

 

要解决此问题,请按照下列步骤操作:
  1. 单击 开始 指向 程序 ,指向 Microsoft SQL Server 2008 ,然后依次和 SQL Server Management Studio
  2. 连接到服务器 对话框单击服务器所需在 服务器类型 列表中,服务器中键入名称 服务器名称 框,然后单击 连接
  3. 在对象资源管理器,单击 数据库 文件夹。
  4. 对象资源管理器详细信息 本页右键单击该列标题,然后单击 重置视图

    请注意 如果 对象资源管理器详细信息 页不可见,按 F 7。 或者,单击在 视图 菜单上的 对象资源管理器详细信息
  5. 在对象资源管理器,右键单击 数据库 文件夹,然后单击 刷新
  6. 文件 菜单中上, 单击 退出
请注意 如果仍然收到在执行步骤 1 到 6 后"症状"部分中提到的该错误消息错误消息可能会造成 排序规则 列。 在这种情况下,请按照下列步骤操作:
  1. 单击 开始 指向 程序 ,指向 Microsoft SQL Server 2008 ,然后依次和 SQL Server Management Studio
  2. 连接到服务器 对话框单击服务器所需在 服务器类型 列表中,服务器中键入名称 服务器名称 框,然后单击 连接
  3. 在对象资源管理器,单击 数据库 文件夹。
  4. 对象资源管理器详细信息 本页右键单击该列标题,然后单击以清除 排序规则 复选框。
  5. 在对象资源管理器,右键单击 数据库 文件夹,然后单击 刷新
  6. 文件 菜单中上, 单击 退出
# Tomcat server: tomcat: uri-encoding: UTF-8 port: 9090 address: 0.0.0.0 servlet: context-path: /springbootw12d6cw5 spring: datasource: driverClassName: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/db_creamics?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&useSSL=false username: root password: root # driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=springbootw12d6cw5 # username: sa # password: 123456 servlet: multipart: max-file-size: 300MB max-request-size: 300MB #mybatis mybatis-plus: mapper-locations: classpath*:mapper/*.xml #实体扫描,多个package用逗号或者分号分隔 typeAliasesPackage: com.entity global-config: #主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID"; id-type: 1 #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断" field-strategy: 1 #驼峰下划线转换 db-column-underline: true #刷新mapper 调试神器 refresh-mapper: true #逻辑删除配置 logic-delete-value: -1 logic-not-delete-value: 0 #自定义SQL注入器 sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true cache-enabled: false call-setters-on-nulls: true #springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other) jdbc-type-for-null: 'null' logging: level: com.tc.mapper: debug pattern: dateformat: MM-dd HH:mm:ss:SSS
最新发布
09-19
你提供的 `application.yml` 配置文件整体结构清晰,用于一个基于 **Spring Boot + MyBatis-Plus + MySQL** 的项目。但结合你之前遇到的错误: > `Error: GlobalConfigUtils setMetaData Fail ! Cause: java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed` 我们可以确认:虽然你的数据库连接配置已经设置 `useSSL=false`,但 **缺少关键参数 `allowPublicKeyRetrieval=true`**,这正是导致认证失败的核心原因。 --- ## ✅ 问题定位与解决方案 ### ❌ 当前数据源 URL(存在问题): ```yaml url: jdbc:mysql://127.0.0.1:3306/db_creamics? useUnicode=true& characterEncoding=utf-8& useJDBCCompliantTimezoneShift=true& useLegacyDatetimeCode=false& serverTimezone=GMT%2B8& useSSL=false ``` 📌 缺少:`allowPublicKeyRetrieval=true` --- ### ✅ 正确配置(修复版) 修改后的 `spring.datasource.url` 应为: ```yaml spring: datasource: driverClassName: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/db_creamics?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true username: root password: root ``` > ✅ 添加了 `allowPublicKeyRetrieval=true` 并统一编码为大写 `UTF-8`(更标准) --- ## 🔍 参数详解 | 参数 | 作用 | |------|------| | `useUnicode=true` | 启用 Unicode 字符编码支持 | | `characterEncoding=UTF-8` | 指定字符集为 UTF-8,防止中文乱码 | | `serverTimezone=GMT%2B8` | 设置区为东八区(等同于 `Asia/Shanghai`),避免间错乱 | | `useSSL=false` | 不使用 SSL 加密(开发可用,生产建议开启) | | `allowPublicKeyRetrieval=true` | ✅ 允许从服务器获取公钥,解决 caching_sha2_password 认证问题 | --- ## ✅ Tomcat 配置说明(当前无误) ```yaml server: tomcat: uri-encoding: UTF-8 port: 9090 address: 0.0.0.0 servlet: context-path: /springbootw12d6cw5 ``` ✅ 解释: - `uri-encoding: UTF-8`:确保请求路径和参数正确解析中文。 - `port: 9090`:服务运行在 9090 端口。 - `address: 0.0.0.0`:监听所有网络接口,允许外部访问。 - `context-path: /springbootw12d6cw5`:应用上下文路径,即访问地址为 `http://localhost:9090/springbootw12d6cw5/xxx` 💡 提示:Spring Boot 2.3+ 中推荐使用 `server.servlet.context-path` 而非旧方式,你已正确使用。 --- ## ✅ 文件上传大小限制配置(合理) ```yaml servlet: multipart: max-file-size: 300MB max-request-size: 300MB ``` ✅ 表示单个文件最大 300MB,整个请求也最多 300MB,适合大文件上传场景。 > ⚠️ 注意:如果部署在 Nginx 后面,还需同步配置: > > ```nginx > client_max_body_size 300M; > ``` --- ## ✅ MyBatis-Plus 配置分析 ```yaml mybatis-plus: mapper-locations: classpath*:mapper/*.xml typeAliasesPackage: com.entity global-config: id-type: 1 field-strategy: 1 db-column-underline: true refresh-mapper: true logic-delete-value: -1 logic-not-delete-value: 0 sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true cache-enabled: false call-setters-on-nulls: true jdbc-type-for-null: 'null' ``` ✅ 总体良好,以下是重点说明: ### 📌 `id-type: 1` - `1`: 用户输入 ID —— 表示你不希望数据库自增,而是由代码指定主键。 - 如果你是用 `@TableId(type = IdType.AUTO)` 或类似注解,请确保逻辑一致。 ### 📌 `field-strategy: 1`(已废弃) ⚠️ 在新版本 MP(3.1.2+)中,`field-strategy` 已被 **弃用**,应改为字段级注解控制: ```java @TableField(insertStrategy = FieldStrategy.NOT_NULL) private String name; ``` 否则可能无效或警告。 ### 📌 `db-column-underline: true` ✅ 开启下划线转驼峰(如 `user_name` → `userName`),推荐保持开启。 ### 📌 `refresh-mapper: true` ✅ 开发阶段有用,每次刷新 Mapper 映射(调试神器),上线建议关闭。 ### 📌 `logic-delete-value: -1` ✅ 逻辑删除标记值 `-1`,未删除为 `0`,符合常规。 ### 📌 `log-impl: StdOutImpl` ✅ 控制台输出 SQL 日志,便于调试。 > 💡 建议:生产环境关闭此日志,改用 `logging.level.com.yourpackage.Mapper=debug` --- ## ✅ 日志配置(合理) ```yaml logging: level: com.tc.mapper: debug pattern: dateformat: MM-dd HH:mm:ss:SSS ``` ✅ 效果: - `com.tc.mapper` 包下的 Mapper 接口执行 SQL 将打印到控制台(得益于 MyBatis 的 StdOutImpl) - 间格式更简洁易读 --- ## ✅ 完整修正后配置(推荐版本) ```yaml # Tomcat 配置 server: tomcat: uri-encoding: UTF-8 port: 9090 address: 0.0.0.0 servlet: context-path: /springbootw12d6cw5 # 数据源配置(修复 allowPublicKeyRetrieval) spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/db_creamics?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true username: root password: root servlet: multipart: max-file-size: 300MB max-request-size: 300MB # MyBatis-Plus 配置 mybatis-plus: mapper-locations: classpath*:mapper/*.xml type-aliases-package: com.entity global-config: # 主键策略:用户输入 id-type: 1 # 字段策略(仅作兼容,建议改用 @TableField 注解控制) field-strategy: 1 # 下划线转驼峰 db-column-underline: true # 开发期可开,生产关 refresh-mapper: true # 逻辑删除 logic-delete-value: -1 logic-not-delete-value: 0 # 自定义SQL注入器(可选) sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector configuration: # 打印SQL log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 数据库列名 user_name -> Java属性 userName map-underscore-to-camel-case: true # 关闭二级缓存 cache-enabled: false # null值也会调用setter call-setters-on-nulls: true # 处理JDBC Null值 jdbc-type-for-null: 'null' # 日志 logging: level: com.tc.mapper: debug pattern: dateformat: MM-dd HH:mm:ss:SSS ``` --- ## ✅ 如何验证是否成功? 1. 启动 Spring Boot 项目 2. 查看控制台是否有以下信息: ``` Creating a new SqlSession Registering transaction synchronization for SqlSession JDBC Connection [....] will be managed by Spring ==> Preparing: SELECT ... FROM user ... ``` 3. 若能正常查询数据库,且无 `Public Key Retrieval` 错误 → 成功! --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值