【问题标题】:Convert user access query from postgreSQL to SQL Server将用户访问查询从 postgreSQL 转换为 SQL Server
【发布时间】:2014-11-25 00:14:15
【问题描述】:

我正在努力将 PostgreSQL 查询转换为 SQL 服务器,并试图了解下面的查询到底在做什么。我了解这些连接,但其余部分根本不清楚。谁能帮帮我。

select c.name 
 FROM CNT c
 LEFT JOIN shares s ON
 c.id = s.id AND s.username::name = "current_user"()
  WHERE c.username::name = "current_user"() OR 'admin'::text = (( SELECT user_role_privs.granted_role
          FROM user_role_privs
          WHERE user_role_privs.granted_role = 'admin'::text)) OR s.username IS NOT NULL AND s.grantee_username::text <> ''::text

【问题讨论】:

    标签: sql-server postgresql privileges user-roles


    【解决方案1】:

    我相信下面的查询是 SQL Server 等效的。我添加了 dbo 模式名称和语句终止符来说明最佳实践,但这在技术上不是必需的。

    SELECT  c.name
    FROM    dbo.CNT AS c
            LEFT JOIN dbo.shares s ON c.id = s.id
                                  AND s.username = CURRENT_USER
    WHERE   c.username = CURRENT_USER
            OR IS_MEMBER(N'admin') = 1
            OR s.username IS NOT NULL
            AND s.grantee_username <> '';
    

    【讨论】:

    • 感谢您,但 dbo.user_role_privs 似乎不是 SQL Server 中的有效对象。它看起来像一个 postgreSQL 系统表。
    • 我改为使用 IS_NUMBER 函数,如果当前用户是指定数据库角色的成员,则返回 1。
    猜你喜欢
    • 2020-03-06
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多