laravel6.20访问mssql,windows php环境可查找、更新记录,linux php环境可查找记录,但不可更新。报The UPDATE permission was denied on the object

1. 运行环境

1). 当前使用的 Laravel 版本?

6.20.44

2). 当前使用的 php/php-fpm 版本?

PHP 版本:本地:7.4, 生产:7.2
php-fpm 版本:本地:7.4, 生产:7.2

3). 当前系统

本地:win11, 生产:ubuntu 1804

4). 业务环境

本地和生产:单机

5). 相关软件版本

mssql: 2012, os:win10

2. 问题描述?

本地和生产环境均安装了pdo_sqlsrv和sqlsrv模块,并安装了ms odbc.
本地环境可以访问远程mssql,select 和update执行成功。(说明账户有访问权限)
生产环境可以访问远程mssql,select语句执行成功。(同本地mssql账户)但在执行update时,报权限错误,代码如下:ORM数据库操作

$rec = REbayInventory::where('localsku', 'jwr-0052')->update(['qoh' => 19]);

出错信息为:Illuminate\Database\QueryException : SQLSTATE[42000]: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]The UPDATE permission was denied on the object ‘Inventory’, database ‘Ambitronic’, schema ‘dbo’. (SQL: update [Inventory] set [qoh] = 19 where [localsku] = jwr-0052)

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

最终结果:账号在windows执行有update权限,但在linux下执行没有update权限。当用sa账号时,两种环境均可正常执行。为什么权限和客户端的OS相关,我也不知道

9个月前 评论
徵羽宫 9个月前
讨论数量: 8

显然本地测试服务器上的 mssql 账户 在 生产环境没有权限, 这种设置挺正常的, 也挺安全的, 整挺好。

10个月前 评论
meditatorzhang (楼主) 10个月前
徵羽宫 (作者) 10个月前

这说明在数据库中,你的用户账户没有对该表进行更新的权限。可能原因如下:

  • 确保你的数据库账户配置正确,包括用户名和密码。可以尝试重新检查配置文件或重新创建数据库用户。(可读说明配置正确)

  • 确保你的数据库账户被授予了执行更新操作的权限。你可以通过查询数据库管理系统的权限设置来确认。(可读不可写说明没有对应的写权限)

  • 确保你使用的是正确的数据库和架构。检查你的SQL语句中指定的表名、数据库名和架构名是否正确。(可读不可写故此排除)

10个月前 评论
meditatorzhang (楼主) 10个月前
anjing (作者) 10个月前

最终结果:账号在windows执行有update权限,但在linux下执行没有update权限。当用sa账号时,两种环境均可正常执行。为什么权限和客户端的OS相关,我也不知道

9个月前 评论
徵羽宫 9个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!