@[TOC](拒绝了对对象 ‘table’ (数据库 ‘thedb’,架构 ‘dbo’)的 SELECT 权限。)
一、问题
sqlserver数据库连接成功,但执行SELECT语句出现bug
com.microsoft.sqlserver.jdbc.SQLServerException: 拒绝了对对象 ‘table’ (数据库 ‘thedb’,架构 ‘dbo’)的 SELECT 权限。
1.如图
![控制台报错]](https://img-blog.csdnimg.cn/20190503122548468.png#pic_center)
2.状态
(1)版本——sql server2017
(2)用户——“root”
我连接数据库所用的用户名是自己新建的——user:“root”,有些权限需要赋予,可以通过"sa"或则系统验证进入管理器(Microsoft SQL Server Management Studio)对其进行赋予如(3)。
(3)权限
此前已经使用sa用户对其进行了一些权限授予,部分如下:
二、分析
很有可能是权限范围给的不够,如下
以上是默认范围
三、改动
将最后一项打钩,权限如下
四、结果(成功)
1.成功
控制台(Consol)输如下所示:
未报权限错误,以上bug与权限无关成功解决。
2.找出范围方法
(1)遍历
一个个单独打钩试
(2)二分法
分两份,一份全打钩,如下图所示
倘若不报错,则对应权限再此份中,继续去二分法尝试。
(3)暴力
全打钩
五、无关报错说明
1.情况
此bug是因为我是测试获取Time类型数据的方式,ResultSet.getDate(“time”)
无关权限的报错如下:
2.说明
sqlserver不支持从 time 到 DATE 的转换。
3.其他结果
(1)mysql
1)time
mysql:
用getString取会将数据完整取出 用getdate取则只会取到1970-01-01 用gettime取则可能因为转化导致小时数有变化, 例如: String10:35:43——time:18:35:43
而且,mysql的time范围’-838:59:59’ to ‘838:59:59’ ,会超过java范围,所以用gettime取超过24小时的time会抛出异常
sqlserver:
sqlserver不支持从 time 到 DATE 的转换,getdate取time会报错。
2)date
mysql:
用getString取和用getDate取结果一样,用gettime取则会报错
sqlserver:
sqlserver 不支持从 date 到 TIME 的转换,用gettime取则会报错
3)datetime
mysql and sqlserver:
用getString取将完整取出,用 date取则会取出date(日期)部分,用getTime取则会取出time部分(可能因为转化导致小时数有变化)