数据库 SQL SERVER

SQL SERVER实验遇到问题,创建角色,将角色授权给用户提示角色附近出现语法错误

img

上面这么多解决方案都不起作用?那么应该仔细排查下问题,点开你的ssms,登录上去以后点开安全性->>登录名->>>找到你创建角色属性,截图上来给我看看,这是最终的链接:https://learn.microsoft.com/zh-cn/sql/t-sql/statements/grant-database-principal-permissions-transact-sql?view=sql-server-ver16
以及我实现的截图:

img

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据您提供的 SQL 语句和报错信息,可以看出问题出在以下这行 SQL 语句上:

GRANT A
TO chen3;

该语句的语法不正确,应该将 A 改为 ROLE A,即:

GRANT ROLE A
TO chen3;

这样就可以将角色 A 授予给用户 chen3

以下是完整的 SQL 语句,用于创建角色、授权角色、将角色授权给用户:

-- 创建角色 A
CREATE ROLE A;

-- 授权角色 A 对表 QN图书 进行 SELECT、INSERT、UPDATE 操作
GRANT SELECT, INSERT, UPDATE ON QN图书 TO A;

-- 将角色 A 授权给用户 chen3
EXEC sp_addrolemember 'A', 'chen3';

在上面的示例中,我们首先使用 CREATE ROLE 语句创建了一个名为 A 的角色。然后,使用 GRANT 语句将角色 A 授权给表 QN图书,让其可以进行 SELECT、INSERT、UPDATE 操作。最后,使用 sp_addrolemember 存储过程将角色 A 授予给用户 chen3

注意,如果您的表名中包含空格或其他特殊字符,需要使用方括号将其括起来。例如:

GRANT SELECT, INSERT, UPDATE ON [My Table] TO A;

希望这些信息对您有所帮助。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

引用chatGPT作答,根据你提供的 SQL 代码和错误消息,你的错误在于 "ON 图书" 部分。"图书" 是一个表名,但它应该用方括号括起来,因为它包含了特殊字符,如下所示:

--创建角色A,赋予它对表图书的选择,更新,插入
CREATE ROLE A;
--赋予权限
GRANT SELECT, INSERT, UPDATE
ON [图书]
TO A;
GRANT A TO chen3;

这应该可以解决你的问题。

图书是一个数据库还是数据表,如果是数据表的话,使用sa账户授权应该是可以的

--创建角色 A
EXEC sp_addrole 'A'
 
--授予 A 对 图书 表的所有权限
GRANT SELECT,DELETE,INSERT,UPDATE ON 图书 TO role_TechDB
 
--添加登录 test,设置密码为123456,默认数据库为TechDB
EXEC sp_addlogin 'test','123456','DB'
EXEC sp_grantdbaccess 'test','test'
 
--添加 test 为角色 A 的成员
EXEC sp_addrolemember 'A','test'

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7668350
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:笔记:SQL SERVER字符串分割(创建函数、调用函数)
  • 除此之外, 这篇博客: SQL Server数据库的管理中的 创建数据库语法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    在这里插入图片描述

  • 您还可以看一下 刘文泷老师的SQL Server 开发与管理高级技巧课程中的 数据库的创建和删除小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    由于题目中没有给出具体的错误信息和代码,无法直接给出解决方案。但是可以推测出可能的问题有以下几点:

    1. SQL语法错误:需要检查所写的SQL语句是否有语法错误,可以借助SQL Server Management Studio的语法检查功能或者在网上搜索相关语法规范进行参考。

    2. 角色名称、用户名称或者表名称错误:需要检查所写的角色名称、用户名称或者表名称是否正确,尤其要注意大小写,可以使用SQL Server Management Studio的对象资源管理器功能检查。

    3. 用户没有足够的权限:需要检查用户是否具有创建角色、授权等权限,可以在SQL Server Management Studio中重新分配用户权限或者直接使用sa超级管理员账户进行操作。

    具体解决方案视具体情况而定,可以参考上述提供的参考资料和相关SQL Server文档进行细节调整。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

-- 创建角色 A
CREATE ROLE A;

-- 赋予权限给角色 A
GRANT SELECT, INSERT, UPDATE ON 图书 TO A;

-- 将角色 A 授权给用户 chen3
GRANT A TO chen3;

-- 给角色 A 授予更新图书表的权限
GRANT UPDATE ON 图书 TO A;

具体来说,错误包括:第 2 行代码的逗号后多了一个空格;第 3 行代码的 ON 后面缺少了一个空格;第 4 行代码缺少了分号和关键词 TO 。

请注意,在 SQL Server 中,每条语句必须以分号结尾,否则可能会导致语法错误。同时,为了可读性和可维护性,建议在关键词和参数之间加上空格,以便更清晰地区分各个部分。