拒绝了对对象 'table' (数据库 'thedb',架构 'dbo')的 SELECT 权限。

@[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部分(可能因为转化导致小时数有变化)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值