检查用户是否具有CREATE DATABASE权限

时间:2016-04-16 14:27:35

标签: sql sql-server tsql

我想检查当前登录到我的SQL服务器的用户是否有权创建数据库。

我尝试过以下陈述:

SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'CREATE')

SELECT HAS_PERMS_BY_NAME(null, 'DATABASE', 'CREATE')

SELECT HAS_PERMS_BY_NAME(null, null, 'CREATE DATABASE')

但是他们中的每一个都返回NULL而不是1,尽管我确实有权创建新的数据库。

我认为它应该通过运行1返回SELECT HAS_PERMS_BY_NAME(null, null, 'VIEW SERVER STATE');来返回1:)

我错过了什么?

3 个答案:

答案 0 :(得分:2)

在我的测试系统上,我能够成功运行:

SELECT has_perms_by_name(null, null, 'CREATE ANY DATABASE');

该权限与CREATE DATABASE略有不同,但可能适合您。

答案 1 :(得分:1)

我可能只有found it

SELECT IS_SRVROLEMEMBER ( 'dbcreator' )

答案 2 :(得分:0)

public class Lemonade {

static int m = 150;
private static Scanner scan;

public static void main(String[] args) {

    int day = 1;

    for(int gameover = m; gameover > 0; day++) {
    int Random = (int) (Math.random() * 100);
    if(Random <= 25) {
        System.out.println("Great Chance!");
        System.out.println("--------------------------------");
    }
    else if(Random <= 50) {
        System.out.println("Good Chance!");
        System.out.println("--------------------------------");
    }
    else if(Random <= 75) {
        System.out.println("Bad Chance!");
        System.out.println("--------------------------------");
    }
    else if(Random <= 100) {
        System.out.println("Awful Chance!");
        System.out.println("--------------------------------");
    }

    int count = 0;

    int none = 0;

    scan = new Scanner(System.in);

    System.out.println("Enter a number between 0 and " + m + "!");

    count = scan.nextInt();

    if(count >= none && count <= m) {
        System.out.println("You entered " + count + "!");
        System.out.println("--------------------------------");
        day = day + 1;
        m = m - count;
        System.out.println("Day " + day);
    }
    else {
        System.out.println("Enter a number between 0 and " + m + "."); 
        count = scan.nextInt();
    }

    }
}
}